mirror of
https://github.com/Hestia-Homes/Model.git
synced 2026-07-27 23:35:01 +00:00
Flag a void property at the front of the deal's booking information 🟩
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
f742795434
commit
bd01a08da8
2 changed files with 30 additions and 9 deletions
|
|
@ -24,7 +24,13 @@ class HubspotDealPropertiesClient:
|
|||
a property whole (HubSpot has no append) would otherwise overwrite
|
||||
edits made since the last scrape.
|
||||
"""
|
||||
raise NotImplementedError
|
||||
deal: Any = scrubbed_call_with_retry(
|
||||
lambda: self._client.crm.deals.basic_api.get_by_id( # type: ignore[reportUnknownMemberType]
|
||||
deal_id, properties=[property_name]
|
||||
)
|
||||
)
|
||||
properties = cast(Dict[str, Optional[str]], deal.properties)
|
||||
return properties.get(property_name)
|
||||
|
||||
def write_deal_property(
|
||||
self, deal_id: str, property_name: str, value: str
|
||||
|
|
|
|||
|
|
@ -270,7 +270,7 @@ class AbriOrchestrator:
|
|||
return tenancy
|
||||
|
||||
if isinstance(tenancy, NoTenancyFound):
|
||||
self._note_property_void(deal_id=deal_id, place_ref=place_ref)
|
||||
self._note_property_void(deal_id=deal_id)
|
||||
return PropertyReportedVoid(place_ref=place_ref)
|
||||
|
||||
contact_ids: List[str] = []
|
||||
|
|
@ -304,15 +304,30 @@ class AbriOrchestrator:
|
|||
),
|
||||
)
|
||||
|
||||
def _note_property_void(self, deal_id: str, place_ref: PlaceRef) -> None:
|
||||
"""Record the void property in the deal's extra booking information.
|
||||
def _note_property_void(self, deal_id: str) -> None:
|
||||
"""Flag the void property at the front of the deal's booking information.
|
||||
|
||||
Deliberately unimplemented: the extra-booking-information property is
|
||||
not yet scraped onto the deal, so there is nothing to append to. The
|
||||
write lands in the follow-up that adds the property; until then the
|
||||
flow completes so a void property never dead-letters. Filling this in
|
||||
is a single write_deal_property call with VOID_PROPERTY_NOTE.
|
||||
HubSpot has no append, so the property is read and rewritten whole.
|
||||
The read is live rather than from the scraped snapshot: the snapshot
|
||||
lags by a scrape cycle, and rewriting from it would discard whatever a
|
||||
coordinator typed in the meantime. The write is still last-write-wins
|
||||
— HubSpot offers no compare-and-set — so the race is narrowed, not
|
||||
closed.
|
||||
"""
|
||||
existing = (
|
||||
self._deal_properties.read_deal_property(
|
||||
deal_id=deal_id, property_name=NOTES_FOR_SURVEYOR_DEAL_PROPERTY
|
||||
)
|
||||
or ""
|
||||
)
|
||||
if existing.startswith(VOID_MARKER):
|
||||
return
|
||||
|
||||
self._deal_properties.write_deal_property(
|
||||
deal_id=deal_id,
|
||||
property_name=NOTES_FOR_SURVEYOR_DEAL_PROPERTY,
|
||||
value=f"{VOID_MARKER} {existing}".rstrip(),
|
||||
)
|
||||
|
||||
def amend_job(self, change: AppointmentChange) -> AmendJobOrchestrationResult:
|
||||
job_no = self._deal_database.job_no_for_deal(change.deal_id)
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue