Skip to content

Commit 6c69310

Browse files
authored
feat: add new place details fields and reviews request modifiers (#474)
* feat: add new place details fields and support for reviews sorting and translation * feat: support reviews (plural) field
1 parent 72c482c commit 6c69310

File tree

2 files changed

+73
-36
lines changed

2 files changed

+73
-36
lines changed

googlemaps/places.py

Lines changed: 66 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -52,43 +52,72 @@
5252
^ PLACES_FIND_FIELDS_ATMOSPHERE
5353
)
5454

55-
PLACES_DETAIL_FIELDS_BASIC = {"address_component",
56-
"adr_address",
57-
"business_status",
58-
"formatted_address",
59-
"geometry",
60-
"geometry/location",
61-
"geometry/location/lat",
62-
"geometry/location/lng",
63-
"geometry/viewport",
64-
"geometry/viewport/northeast",
65-
"geometry/viewport/northeast/lat",
66-
"geometry/viewport/northeast/lng",
67-
"geometry/viewport/southwest",
68-
"geometry/viewport/southwest/lat",
69-
"geometry/viewport/southwest/lng",
70-
"icon",
71-
"name",
72-
"permanently_closed",
73-
"photo",
74-
"place_id",
75-
"plus_code",
76-
"type",
77-
"url",
78-
"utc_offset",
79-
"vicinity",}
80-
81-
PLACES_DETAIL_FIELDS_CONTACT = {"formatted_phone_number", "international_phone_number", "opening_hours", "website"}
82-
83-
PLACES_DETAIL_FIELDS_ATMOSPHERE = {"editorial_summary","price_level", "rating", "review", "user_ratings_total"}
55+
PLACES_DETAIL_FIELDS_BASIC = {
56+
"address_component",
57+
"adr_address",
58+
"business_status",
59+
"formatted_address",
60+
"geometry",
61+
"geometry/location",
62+
"geometry/location/lat",
63+
"geometry/location/lng",
64+
"geometry/viewport",
65+
"geometry/viewport/northeast",
66+
"geometry/viewport/northeast/lat",
67+
"geometry/viewport/northeast/lng",
68+
"geometry/viewport/southwest",
69+
"geometry/viewport/southwest/lat",
70+
"geometry/viewport/southwest/lng",
71+
"icon",
72+
"name",
73+
"permanently_closed",
74+
"photo",
75+
"place_id",
76+
"plus_code",
77+
"type",
78+
"url",
79+
"utc_offset",
80+
"vicinity",
81+
"wheelchair_accessible_entrance"
82+
}
83+
84+
PLACES_DETAIL_FIELDS_CONTACT = {
85+
"formatted_phone_number",
86+
"international_phone_number",
87+
"opening_hours",
88+
"current_opening_hours",
89+
"secondary_opening_hours",
90+
"website",
91+
}
92+
93+
PLACES_DETAIL_FIELDS_ATMOSPHERE = {
94+
"curbside_pickup",
95+
"delivery",
96+
"dine_in",
97+
"editorial_summary",
98+
"price_level",
99+
"rating",
100+
"reservable",
101+
"review", # prefer "reviews" to match API documentation
102+
"reviews",
103+
"serves_beer",
104+
"serves_breakfast",
105+
"serves_brunch",
106+
"serves_dinner",
107+
"serves_lunch",
108+
"serves_vegetarian_food",
109+
"serves_wine",
110+
"takeout",
111+
"user_ratings_total"
112+
}
84113

85114
PLACES_DETAIL_FIELDS = (
86115
PLACES_DETAIL_FIELDS_BASIC
87116
^ PLACES_DETAIL_FIELDS_CONTACT
88117
^ PLACES_DETAIL_FIELDS_ATMOSPHERE
89118
)
90119

91-
DEPRECATED_FIELDS = {"permanently_closed"}
120+
DEPRECATED_FIELDS = {"permanently_closed", "review"}
92121
DEPRECATED_FIELDS_MESSAGE = (
93122
"Fields, %s, are deprecated. "
94123
"Read more at https://developers.google.com/maps/deprecations."
@@ -402,7 +431,8 @@ def place(
402431
session_token=None,
403432
fields=None,
404433
language=None,
405-
reviews_sort="most_relevant"
434+
reviews_no_translations=False,
435+
reviews_sort="most_relevant",
406436
):
407437
"""
408438
Comprehensive details for an individual place.
@@ -423,6 +453,9 @@ def place(
423453
:param language: The language in which to return results.
424454
:type language: string
425455
456+
:param reviews_no_translations: Specify reviews_no_translations=True to disable translation of reviews; reviews_no_translations=False (default) enables translation of reviews.
457+
:type reviews_no_translations: bool
458+
426459
:param reviews_sort: The sorting method to use when returning reviews.
427460
Can be set to most_relevant (default) or newest.
428461
:type reviews_sort: string
@@ -455,6 +488,8 @@ def place(
455488
params["language"] = language
456489
if session_token:
457490
params["sessiontoken"] = session_token
491+
if reviews_no_translations:
492+
params["reviews_no_translations"] = "true"
458493
if reviews_sort:
459494
params["reviews_sort"] = reviews_sort
460495

tests/test_places.py

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,6 @@ def setUp(self):
3636
self.type = "liquor_store"
3737
self.language = "en-AU"
3838
self.region = "AU"
39-
self.reviews_sort="newest"
4039
self.radius = 100
4140

4241
@responses.activate
@@ -164,15 +163,18 @@ def test_place_detail(self):
164163

165164
self.client.place(
166165
"ChIJN1t_tDeuEmsRUsoyG83frY4",
167-
fields=["business_status", "geometry/location", "place_id"],
166+
fields=["business_status", "geometry/location",
167+
"place_id", "reviews"],
168168
language=self.language,
169-
reviews_sort=self.reviews_sort,
169+
reviews_no_translations=True,
170+
reviews_sort="newest",
170171
)
171172

172173
self.assertEqual(1, len(responses.calls))
173174
self.assertURLEqual(
174-
"%s?reviews_sort=newest&language=en-AU&placeid=ChIJN1t_tDeuEmsRUsoyG83frY4"
175-
"&key=%s&fields=business_status,geometry/location,place_id"
175+
"%s?language=en-AU&placeid=ChIJN1t_tDeuEmsRUsoyG83frY4"
176+
"&reviews_no_translations=true&reviews_sort=newest"
177+
"&key=%s&fields=business_status,geometry/location,place_id,reviews"
176178
% (url, self.key),
177179
responses.calls[0].request.url,
178180
)

0 commit comments

Comments
 (0)