Field values (V1)¶
Service for managing field values.
For list entry field values, prefer ListEntryService.update_field_value(). Use this for global field values not tied to list entries.
Source code in affinity/services/v1_only.py
641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 | |
create(data: FieldValueCreate) -> FieldValue
¶
Create a field value (V1 API).
Note: V1 writes require numeric field IDs. The SDK accepts V2-style
field-<digits> IDs and converts them; enriched/relationship-intelligence
IDs are not supported.
Source code in affinity/services/v1_only.py
707 708 709 710 711 712 713 714 715 716 717 718 719 | |
delete(field_value_id: FieldValueId) -> bool
¶
Delete a field value.
Source code in affinity/services/v1_only.py
730 731 732 733 | |
get_for_entity(field_id: str | FieldId, *, person_id: PersonId | None = None, company_id: CompanyId | None = None, opportunity_id: OpportunityId | None = None, list_entry_id: ListEntryId | None = None, default: T = _UNSET) -> FieldValue | T | None
¶
Get a specific field value for an entity.
Convenience method that fetches all field values and returns the one matching field_id. Like dict.get(), returns None (or default) if not found.
Note: This still makes one API call to fetch all field values for the entity.
For entities with hundreds of field values, prefer using list() directly
if you need to inspect multiple fields.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
field_id
|
str | FieldId
|
The field to look up (accepts str or FieldId for convenience) |
required |
person_id
|
PersonId | None
|
Person entity (exactly one entity ID required) |
None
|
company_id
|
CompanyId | None
|
Company entity |
None
|
opportunity_id
|
OpportunityId | None
|
Opportunity entity |
None
|
list_entry_id
|
ListEntryId | None
|
List entry entity |
None
|
default
|
T
|
Value to return if field not found (default: None) |
_UNSET
|
Returns:
| Name | Type | Description |
|---|---|---|
FieldValue | T | None
|
FieldValue if the field has a value, default otherwise. |
|
Note |
FieldValue | T | None
|
A FieldValue with |
Example
Check if a person has a specific field value¶
status = client.field_values.get_for_entity( "field-123", # or FieldId("field-123") person_id=PersonId(456), ) if status is None: print("Field is empty") else: print(f"Value: {status.value}")
With default value¶
status = client.field_values.get_for_entity( "field-123", person_id=PersonId(456), default="N/A", )
Source code in affinity/services/v1_only.py
735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 | |
list(*, person_id: PersonId | None = None, company_id: CompanyId | None = None, opportunity_id: OpportunityId | None = None, list_entry_id: ListEntryId | None = None) -> list[FieldValue]
¶
Get field values for an entity.
Exactly one of person_id, company_id, opportunity_id, or list_entry_id must be provided.
Raises:
| Type | Description |
|---|---|
ValueError
|
If zero or multiple IDs are provided. |
Source code in affinity/services/v1_only.py
652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 | |
list_batch(person_ids: Sequence[PersonId] | None = None, company_ids: Sequence[CompanyId] | None = None, opportunity_ids: Sequence[OpportunityId] | None = None, *, on_error: Literal['raise', 'skip'] = 'raise') -> dict[PersonId | CompanyId | OpportunityId, builtins.list[FieldValue]]
¶
Get field values for multiple entities.
Performance note: This makes one API call per entity (O(n) calls). There is no server-side batch endpoint. Use this for convenience and consistent error handling, not for performance optimization. For parallelism, use the async client.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
person_ids
|
Sequence[PersonId] | None
|
Sequence of person IDs (mutually exclusive with others) |
None
|
company_ids
|
Sequence[CompanyId] | None
|
Sequence of company IDs |
None
|
opportunity_ids
|
Sequence[OpportunityId] | None
|
Sequence of opportunity IDs |
None
|
on_error
|
Literal['raise', 'skip']
|
How to handle errors - "raise" (default) or "skip" failed IDs |
'raise'
|
Returns:
| Name | Type | Description |
|---|---|---|
dict[PersonId | CompanyId | OpportunityId, list[FieldValue]]
|
Dict mapping entity_id -> list of field values. |
|
Note |
dict[PersonId | CompanyId | OpportunityId, list[FieldValue]]
|
Dict ordering is not guaranteed; do not rely on insertion order. |
Example
Check which persons have a specific field set¶
fv_map = client.field_values.list_batch(person_ids=person_ids) for person_id, field_values in fv_map.items(): has_status = any(fv.field_id == target_field for fv in field_values)
Source code in affinity/services/v1_only.py
798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 | |
update(field_value_id: FieldValueId, value: Any) -> FieldValue
¶
Update a field value.
Source code in affinity/services/v1_only.py
721 722 723 724 725 726 727 728 | |