Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
### v1.14.1
- Update `property_v2.search` endpoint params.

### v1.13.0
- Add support for `property_v2.search` endpoint.

Expand Down
4 changes: 3 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -485,11 +485,13 @@ addresses = client.property_address.search.retrieve(
Gets a list of unique properties and their associated metadata and events based on a set of filters. Use one of three search methods:
1. `parcl_ids`
2. `parcl_property_ids`
3. `location` (must provide latitude, longitude, and radius)
3. `geo_coordinates` (must provide latitude, longitude, and radius)

```python
results, filter_data = client.property_v2.search.retrieve(
# parcl_ids=[5495449],
parcl_property_ids=[78353317, 135921544],
# geo_coordinates= {"latitude": 36.159445, "longitude": -86.483244, radius: 1},
event_names=["LISTED_RENT"],
is_new_construction=False,
max_event_date="2024-12-31",
Expand Down
2 changes: 1 addition & 1 deletion parcllabs/__version__.py
Original file line number Diff line number Diff line change
@@ -1 +1 @@
VERSION = "1.14.0"
VERSION = "1.14.1"
27 changes: 8 additions & 19 deletions parcllabs/services/properties/property_v2.py
Original file line number Diff line number Diff line change
Expand Up @@ -144,7 +144,7 @@ def _build_search_criteria(
self,
parcl_ids: list[int] | None = None,
parcl_property_ids: list[int] | None = None,
location: dict[str, float] | None = None,
geo_coordinates: dict[str, float] | None = None,
) -> dict[str, Any]:
"""Build and validate search criteria."""
data = {}
Expand All @@ -155,8 +155,8 @@ def _build_search_criteria(
if parcl_property_ids:
data["parcl_property_ids"] = parcl_property_ids

if location and all(k in location for k in ["latitude", "longitude", "radius"]):
data.update(location)
if geo_coordinates:
data["geo_coordinates"] = geo_coordinates

return data

Expand Down Expand Up @@ -265,9 +265,7 @@ def retrieve(
self,
parcl_ids: list[int] | None = None,
parcl_property_ids: list[int] | None = None,
latitude: float | None = None,
longitude: float | None = None,
radius: float | None = None,
geo_coordinates: dict[str, float] | None = None,
property_types: list[str] | None = None,
min_beds: int | None = None,
max_beds: int | None = None,
Expand Down Expand Up @@ -300,9 +298,8 @@ def retrieve(
Args:
parcl_ids: List of parcl_ids to filter by.
parcl_property_ids: List of parcl_property_ids to filter by.
latitude: Latitude to filter by.
longitude: Longitude to filter by.
radius: Radius to filter by.
geo_coordinates: Dictionary containing latitude, longitude, and radius (in miles)
to filter by.
property_types: List of property types to filter by.
min_beds: Minimum number of bedrooms to filter by.
max_beds: Maximum number of bedrooms to filter by.
Expand Down Expand Up @@ -331,16 +328,11 @@ def retrieve(
Returns:
A pandas DataFrame containing the property data.
"""
# Build location dict if latitude, longitude and radius are provided
location = None
if all(v is not None for v in [latitude, longitude, radius]):
location = {"latitude": latitude, "longitude": longitude, "radius": radius}

# Build search criteria
data = self._build_search_criteria(
parcl_ids=parcl_ids,
parcl_property_ids=parcl_property_ids,
location=location,
geo_coordinates=geo_coordinates,
)

# Build filters using all provided parameters
Expand All @@ -350,12 +342,9 @@ def retrieve(
"self",
"parcl_ids",
"parcl_property_ids",
"latitude",
"longitude",
"radius",
"params",
"data",
"location",
"geo_coordinates",
]:
kwargs.pop(key, None)

Expand Down
12 changes: 5 additions & 7 deletions tests/test_property_v2.py
Original file line number Diff line number Diff line change
Expand Up @@ -52,20 +52,18 @@ def test_build_search_criteria(property_v2_service: PropertyV2Service) -> None:
assert criteria == {"parcl_property_ids": [789, 101]}

# Test with location
location = {"latitude": 37.7749, "longitude": -122.4194, "radius": 5.0}
criteria = property_v2_service._build_search_criteria(location=location)
assert criteria == location
geo_coordinates = {"latitude": 37.7749, "longitude": -122.4194, "radius": 5.0}
criteria = property_v2_service._build_search_criteria(geo_coordinates=geo_coordinates)
assert criteria == {"geo_coordinates": geo_coordinates}

# Test with all parameters
criteria = property_v2_service._build_search_criteria(
parcl_ids=[123], parcl_property_ids=[456], location=location
parcl_ids=[123], parcl_property_ids=[456], geo_coordinates=geo_coordinates
)
assert criteria == {
"parcl_ids": [123],
"parcl_property_ids": [456],
"latitude": 37.7749,
"longitude": -122.4194,
"radius": 5.0,
"geo_coordinates": geo_coordinates,
}


Expand Down