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.16.0
- Added the `entity_seller_name` parameter to the `property_v2.search` endpoint

### v1.15.2
- Update `property_v2.search` to fix limit logic bug.

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.15.2"
VERSION = "1.16.0"
11 changes: 11 additions & 0 deletions parcllabs/schemas/schemas.py
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,9 @@ class PropertyV2RetrieveParams(BaseModel):
owner_name: list[str] | None = Field(
default=None, description="List of owner names to filter by"
)
entity_seller_name: list[str] | None = Field(
default=None, description="List of entity seller names to filter by"
)
is_investor_owned: bool | None = Field(
default=None, description="Whether to filter by investor owned"
)
Expand Down Expand Up @@ -169,6 +172,14 @@ def validate_owner_names(cls, v: list[str] | None) -> list[str] | None:
return [name.upper() for name in v]
return v

@field_validator("entity_seller_name")
@classmethod
def validate_entity_seller_names(cls, v: list[str] | None) -> list[str] | None:
"""Validate entity seller names and convert to uppercase."""
if v is not None:
return [name.upper() for name in v]
return v

@field_validator(
"min_record_added_date",
"max_record_added_date",
Expand Down
9 changes: 9 additions & 0 deletions parcllabs/services/properties/property_v2.py
Original file line number Diff line number Diff line change
Expand Up @@ -412,6 +412,12 @@ def _build_owner_filters(self, params: PropertyV2RetrieveParams) -> dict[str, An
if params.owner_name:
owner_filters["owner_name"] = [owner_name.upper() for owner_name in params.owner_name]

# Handle entity seller names
if params.entity_seller_name:
owner_filters["entity_seller_name"] = [
entity_seller_name.upper() for entity_seller_name in params.entity_seller_name
]

# Handle boolean parameters
if params.is_current_owner is not None:
owner_filters["is_current_owner"] = self.simple_bool_validator(params.is_current_owner)
Expand Down Expand Up @@ -482,6 +488,7 @@ def retrieve(
max_record_updated_date: str | None = None,
is_current_owner: bool | None = None,
owner_name: list[str] | None = None,
entity_seller_name: list[str] | None = None,
is_investor_owned: bool | None = None,
is_owner_occupied: bool | None = None,
current_on_market_flag: bool | None = None,
Expand Down Expand Up @@ -525,6 +532,7 @@ def retrieve(
max_record_updated_date: Maximum record updated date to filter by.
is_current_owner: Whether to filter by current owner.
owner_name: List of owner names to filter by.
entity_seller_name: List of entity seller names to filter by.
is_investor_owned: Whether to filter by investor owned.
is_owner_occupied: Whether to filter by owner occupied.
current_on_market_flag: Whether to filter by current_on_market flag.
Expand Down Expand Up @@ -569,6 +577,7 @@ def retrieve(
max_record_updated_date=max_record_updated_date,
is_current_owner=is_current_owner,
owner_name=owner_name,
entity_seller_name=entity_seller_name,
is_investor_owned=is_investor_owned,
is_owner_occupied=is_owner_occupied,
current_on_market_flag=current_on_market_flag,
Expand Down