From 1f619c160848e01d64661e9033f592bf644d7d14 Mon Sep 17 00:00:00 2001 From: Will Pike <6687499+pike00@users.noreply.github.com> Date: Sun, 3 May 2026 01:00:23 -0500 Subject: [PATCH 1/3] WIP: dirac autorun for kindred-sdk (error) --- kind | 120 ++++ kindred | 23 + kindred-sdk/.gitignore | 23 + kindred-sdk/README.md | 124 ++++ kindred-sdk/kindred_sdk/__init__.py | 39 ++ kindred-sdk/kindred_sdk/client.py | 0 kindred-sdk/kindred_sdk/resources/__init__.py | 0 .../kindred_sdk/resources/addresses.py | 63 ++ .../kindred_sdk/resources/custom_fields.py | 99 +++ kindred-sdk/kindred_sdk/resources/debts.py | 63 ++ kindred-sdk/kindred_sdk/resources/gifts.py | 63 ++ kindred-sdk/kindred_sdk/resources/groups.py | 63 ++ .../kindred_sdk/resources/interactions.py | 63 ++ kindred-sdk/kindred_sdk/resources/journal.py | 63 ++ .../kindred_sdk/resources/life_events.py | 63 ++ kindred-sdk/kindred_sdk/resources/notes.py | 63 ++ kindred-sdk/kindred_sdk/resources/pets.py | 63 ++ .../kindred_sdk/resources/relationships.py | 63 ++ .../kindred_sdk/resources/reminders.py | 63 ++ kindred-sdk/kindred_sdk/resources/tags.py | 63 ++ kindred-sdk/personal_crm_client/__init__.py | 8 + .../personal_crm_client/api/__init__.py | 1 + .../api/activity_logs/__init__.py | 1 + .../activity_logs_list_activity_logs.py | 288 +++++++++ .../api/addresses/__init__.py | 1 + .../addresses_create_address_route.py | 195 ++++++ .../api/addresses/addresses_delete_address.py | 184 ++++++ .../api/addresses/addresses_list_addresses.py | 184 ++++++ .../api/addresses/addresses_update_address.py | 209 +++++++ .../api/calendar/__init__.py | 1 + .../calendar/calendar_get_calendar_month.py | 179 ++++++ .../api/carddav/__init__.py | 1 + .../api/carddav/carddav_well_known_carddav.py | 108 ++++ .../api/contact_fields/__init__.py | 1 + ...ntact_fields_create_contact_field_route.py | 195 ++++++ .../contact_fields_delete_contact_field.py | 184 ++++++ .../contact_fields_list_contact_fields.py | 221 +++++++ .../contact_fields_update_contact_field.py | 209 +++++++ .../api/contacts/__init__.py | 1 + .../api/contacts/contacts_create_contact.py | 195 ++++++ .../api/contacts/contacts_delete_contact.py | 204 +++++++ .../api/contacts/contacts_get_contact.py | 188 ++++++ .../contacts_get_contact_household.py | 196 ++++++ .../contacts_list_contact_mentions.py | 193 ++++++ .../api/contacts/contacts_list_contacts.py | 425 +++++++++++++ .../contacts/contacts_list_losing_touch.py | 212 +++++++ .../api/contacts/contacts_restore_contact.py | 188 ++++++ .../api/contacts/contacts_update_contact.py | 209 +++++++ .../api/custom_fields/__init__.py | 1 + .../custom_fields_create_field_definition.py | 195 ++++++ .../custom_fields_create_field_value.py | 195 ++++++ .../custom_fields_delete_field_definition.py | 184 ++++++ .../custom_fields_delete_field_value.py | 184 ++++++ .../custom_fields_list_field_definitions.py | 108 ++++ .../custom_fields_list_field_values.py | 184 ++++++ .../custom_fields_update_field_definition.py | 209 +++++++ .../custom_fields_update_field_value.py | 209 +++++++ .../personal_crm_client/api/debts/__init__.py | 1 + .../api/debts/debts_create_debt_route.py | 195 ++++++ .../api/debts/debts_delete_debt.py | 184 ++++++ .../api/debts/debts_list_debts.py | 188 ++++++ .../api/debts/debts_update_debt.py | 209 +++++++ .../personal_crm_client/api/gifts/__init__.py | 1 + .../api/gifts/gifts_create_gift_route.py | 195 ++++++ .../api/gifts/gifts_delete_gift.py | 184 ++++++ .../api/gifts/gifts_list_gifts.py | 188 ++++++ .../api/gifts/gifts_update_gift.py | 209 +++++++ .../api/groups/__init__.py | 1 + .../api/groups/groups_create_group_route.py | 195 ++++++ .../api/groups/groups_delete_group.py | 184 ++++++ .../api/groups/groups_list_groups.py | 211 +++++++ .../api/groups/groups_update_group.py | 209 +++++++ .../api/import_export/__init__.py | 1 + .../import_export_export_json.py | 108 ++++ .../import_export_export_vcard.py | 108 ++++ .../import_export_import_vcard.py | 190 ++++++ .../api/interactions/__init__.py | 1 + .../interactions_create_interaction_route.py | 195 ++++++ .../interactions_delete_interaction.py | 184 ++++++ .../interactions_list_interactions.py | 234 +++++++ .../interactions_update_interaction.py | 209 +++++++ .../api/journal/__init__.py | 1 + .../journal_create_journal_entry_route.py | 195 ++++++ .../journal/journal_delete_journal_entry.py | 184 ++++++ .../journal/journal_list_journal_entries.py | 211 +++++++ .../journal/journal_update_journal_entry.py | 209 +++++++ .../api/life_events/__init__.py | 1 + .../life_events_create_life_event_route.py | 195 ++++++ .../life_events_delete_life_event.py | 184 ++++++ .../life_events_list_life_events.py | 188 ++++++ .../life_events_update_life_event.py | 209 +++++++ .../personal_crm_client/api/login/__init__.py | 1 + .../api/login/login_login_access_token.py | 194 ++++++ .../api/login/login_recover_password.py | 187 ++++++ .../login_recover_password_html_content.py | 183 ++++++ .../api/login/login_reset_password.py | 195 ++++++ .../api/login/login_test_token.py | 158 +++++ .../api/media_recommendations/__init__.py | 1 + ...tions_create_media_recommendation_route.py | 195 ++++++ ...mmendations_delete_media_recommendation.py | 184 ++++++ ...ommendations_list_media_recommendations.py | 188 ++++++ ...mmendations_update_media_recommendation.py | 209 +++++++ .../personal_crm_client/api/notes/__init__.py | 1 + .../api/notes/notes_create_note_route.py | 195 ++++++ .../api/notes/notes_delete_note.py | 184 ++++++ .../api/notes/notes_list_notes.py | 225 +++++++ .../api/notes/notes_update_note_route.py | 209 +++++++ .../personal_crm_client/api/pets/__init__.py | 1 + .../api/pets/pets_create_pet_route.py | 195 ++++++ .../api/pets/pets_delete_pet.py | 184 ++++++ .../api/pets/pets_list_pets.py | 184 ++++++ .../api/pets/pets_update_pet.py | 209 +++++++ .../api/private/__init__.py | 1 + .../api/private/private_create_user.py | 195 ++++++ .../api/relationships/__init__.py | 1 + ...relationships_create_relationship_route.py | 195 ++++++ .../relationships_delete_relationship.py | 184 ++++++ .../relationships_list_relationships.py | 184 ++++++ .../relationships_lookup_inverse.py | 215 +++++++ .../relationships_update_relationship.py | 229 +++++++ .../api/reminders/__init__.py | 1 + .../reminders_create_reminder_route.py | 195 ++++++ .../reminders/reminders_delete_reminder.py | 184 ++++++ .../api/reminders/reminders_list_reminders.py | 231 +++++++ .../reminders/reminders_snooze_reminder.py | 206 +++++++ .../reminders/reminders_update_reminder.py | 209 +++++++ .../api/tag_shares/__init__.py | 1 + .../tag_shares/tag_shares_create_tag_share.py | 187 ++++++ .../tag_shares/tag_shares_delete_tag_share.py | 193 ++++++ .../tag_shares/tag_shares_list_tag_shares.py | 189 ++++++ .../personal_crm_client/api/tags/__init__.py | 1 + .../api/tags/tags_create_tag_route.py | 195 ++++++ .../api/tags/tags_delete_tag.py | 184 ++++++ .../api/tags/tags_list_tags.py | 211 +++++++ .../api/tags/tags_update_tag.py | 209 +++++++ .../personal_crm_client/api/users/__init__.py | 1 + .../api/users/users_create_user.py | 195 ++++++ .../api/users/users_delete_user.py | 188 ++++++ .../api/users/users_delete_user_me.py | 158 +++++ .../api/users/users_read_user_by_id.py | 188 ++++++ .../api/users/users_read_user_me.py | 158 +++++ .../api/users/users_read_users.py | 211 +++++++ .../api/users/users_register_user.py | 195 ++++++ .../api/users/users_update_password_me.py | 195 ++++++ .../api/users/users_update_user.py | 209 +++++++ .../api/users/users_update_user_me.py | 195 ++++++ .../personal_crm_client/api/utils/__init__.py | 1 + .../api/utils/utils_health_check.py | 145 +++++ .../api/utils/utils_test_email.py | 195 ++++++ .../api/webhooks/__init__.py | 1 + .../api/webhooks/webhooks_create_webhook.py | 191 ++++++ .../api/webhooks/webhooks_delete_webhook.py | 184 ++++++ .../api/webhooks/webhooks_inbound_webhook.py | 240 ++++++++ .../api/webhooks/webhooks_list_webhooks.py | 108 ++++ .../api/webhooks/webhooks_update_webhook.py | 205 +++++++ kindred-sdk/personal_crm_client/client.py | 271 +++++++++ kindred-sdk/personal_crm_client/errors.py | 14 + .../personal_crm_client/models/__init__.py | 205 +++++++ .../models/activity_log_public.py | 192 ++++++ ...activity_log_public_changes_json_type_0.py | 65 ++ .../models/activity_logs_public.py | 102 ++++ .../models/address_create.py | 259 ++++++++ .../models/address_public.py | 270 +++++++++ .../models/address_update.py | 259 ++++++++ .../models/body_import_export_import_vcard.py | 101 +++ .../models/body_login_login_access_token.py | 158 +++++ .../models/calendar_entry.py | 112 ++++ .../models/calendar_month_response.py | 92 +++ .../models/calendar_month_response_days.py | 90 +++ .../models/contact_create.py | 491 +++++++++++++++ .../models/contact_field_create.py | 127 ++++ .../models/contact_field_public.py | 138 +++++ .../models/contact_field_type.py | 8 + .../models/contact_field_update.py | 188 ++++++ .../models/contact_public.py | 573 ++++++++++++++++++ .../models/contact_update.py | 540 +++++++++++++++++ .../models/contacts_public.py | 102 ++++ .../models/custom_field_definition_create.py | 150 +++++ .../models/custom_field_definition_public.py | 175 ++++++ .../models/custom_field_definition_update.py | 175 ++++++ .../models/custom_field_value_create.py | 99 +++ .../models/custom_field_value_public.py | 133 ++++ .../models/custom_field_value_update.py | 91 +++ .../personal_crm_client/models/debt_create.py | 176 ++++++ .../models/debt_direction.py | 8 + .../personal_crm_client/models/debt_public.py | 198 ++++++ .../personal_crm_client/models/debt_update.py | 223 +++++++ .../models/debts_public.py | 102 ++++ .../personal_crm_client/models/gift_create.py | 239 ++++++++ .../personal_crm_client/models/gift_public.py | 261 ++++++++ .../personal_crm_client/models/gift_status.py | 9 + .../personal_crm_client/models/gift_update.py | 265 ++++++++ .../models/gifts_public.py | 102 ++++ .../models/group_create.py | 99 +++ .../models/group_public.py | 124 ++++ .../models/group_update.py | 112 ++++ .../models/groups_public.py | 102 ++++ .../models/http_validation_error.py | 100 +++ .../models/interaction_attendee_summary.py | 132 ++++ .../models/interaction_channel.py | 13 + .../models/interaction_create.py | 180 ++++++ .../models/interaction_public.py | 211 +++++++ .../models/interaction_update.py | 246 ++++++++ .../models/interactions_public.py | 102 ++++ .../models/journal_entries_public.py | 102 ++++ .../models/journal_entry_create.py | 112 ++++ .../models/journal_entry_public.py | 146 +++++ .../models/journal_entry_update.py | 147 +++++ .../models/life_event_create.py | 142 +++++ .../models/life_event_public.py | 164 +++++ .../models/life_event_update.py | 189 ++++++ .../models/life_events_public.py | 102 ++++ .../models/media_category.py | 12 + .../models/media_recommendation_create.py | 179 ++++++ .../models/media_recommendation_public.py | 212 +++++++ .../models/media_recommendation_update.py | 202 ++++++ .../models/media_recommendations_public.py | 102 ++++ .../models/mention_source_contact.py | 132 ++++ .../personal_crm_client/models/message.py | 76 +++ .../models/new_password.py | 84 +++ .../personal_crm_client/models/note_create.py | 88 +++ .../models/note_mention_public.py | 117 ++++ .../personal_crm_client/models/note_public.py | 124 ++++ .../personal_crm_client/models/note_update.py | 91 +++ .../models/notes_public.py | 102 ++++ .../personal_crm_client/models/pet_create.py | 153 +++++ .../personal_crm_client/models/pet_public.py | 164 +++++ .../personal_crm_client/models/pet_update.py | 154 +++++ .../models/private_user_create.py | 102 ++++ .../models/relationship_create.py | 144 +++++ .../models/relationship_public.py | 166 +++++ .../models/relationship_update.py | 112 ++++ ...e_response_relationships_lookup_inverse.py | 80 +++ .../models/reminder_create.py | 176 ++++++ .../models/reminder_frequency.py | 11 + .../models/reminder_public.py | 249 ++++++++ .../models/reminder_update.py | 202 ++++++ .../models/reminders_public.py | 102 ++++ .../personal_crm_client/models/share_in.py | 91 +++ .../personal_crm_client/models/tag_create.py | 99 +++ .../personal_crm_client/models/tag_public.py | 124 ++++ .../models/tag_share_public.py | 113 ++++ ...re_response_tag_shares_delete_tag_share.py | 65 ++ .../models/tag_shares_public.py | 102 ++++ .../personal_crm_client/models/tag_update.py | 112 ++++ .../personal_crm_client/models/tags_public.py | 102 ++++ .../personal_crm_client/models/token.py | 86 +++ .../models/update_password.py | 84 +++ .../personal_crm_client/models/user_create.py | 125 ++++ .../personal_crm_client/models/user_public.py | 164 +++++ .../models/user_register.py | 107 ++++ .../personal_crm_client/models/user_update.py | 151 +++++ .../models/user_update_me.py | 112 ++++ .../models/users_public.py | 102 ++++ .../models/validation_error.py | 141 +++++ .../models/validation_error_context.py | 65 ++ .../models/webhook_endpoint_base.py | 158 +++++ .../webhooks_inbound_webhook_payload.py | 65 ++ kindred-sdk/personal_crm_client/py.typed | 1 + kindred-sdk/personal_crm_client/types.py | 53 ++ kindred-sdk/pyproject.toml | 26 + openapi.json | 1 + 262 files changed, 36913 insertions(+) create mode 100644 kind create mode 100644 kindred create mode 100644 kindred-sdk/.gitignore create mode 100644 kindred-sdk/README.md create mode 100644 kindred-sdk/kindred_sdk/__init__.py create mode 100644 kindred-sdk/kindred_sdk/client.py create mode 100644 kindred-sdk/kindred_sdk/resources/__init__.py create mode 100644 kindred-sdk/kindred_sdk/resources/addresses.py create mode 100644 kindred-sdk/kindred_sdk/resources/custom_fields.py create mode 100644 kindred-sdk/kindred_sdk/resources/debts.py create mode 100644 kindred-sdk/kindred_sdk/resources/gifts.py create mode 100644 kindred-sdk/kindred_sdk/resources/groups.py create mode 100644 kindred-sdk/kindred_sdk/resources/interactions.py create mode 100644 kindred-sdk/kindred_sdk/resources/journal.py create mode 100644 kindred-sdk/kindred_sdk/resources/life_events.py create mode 100644 kindred-sdk/kindred_sdk/resources/notes.py create mode 100644 kindred-sdk/kindred_sdk/resources/pets.py create mode 100644 kindred-sdk/kindred_sdk/resources/relationships.py create mode 100644 kindred-sdk/kindred_sdk/resources/reminders.py create mode 100644 kindred-sdk/kindred_sdk/resources/tags.py create mode 100644 kindred-sdk/personal_crm_client/__init__.py create mode 100644 kindred-sdk/personal_crm_client/api/__init__.py create mode 100644 kindred-sdk/personal_crm_client/api/activity_logs/__init__.py create mode 100644 kindred-sdk/personal_crm_client/api/activity_logs/activity_logs_list_activity_logs.py create mode 100644 kindred-sdk/personal_crm_client/api/addresses/__init__.py create mode 100644 kindred-sdk/personal_crm_client/api/addresses/addresses_create_address_route.py create mode 100644 kindred-sdk/personal_crm_client/api/addresses/addresses_delete_address.py create mode 100644 kindred-sdk/personal_crm_client/api/addresses/addresses_list_addresses.py create mode 100644 kindred-sdk/personal_crm_client/api/addresses/addresses_update_address.py create mode 100644 kindred-sdk/personal_crm_client/api/calendar/__init__.py create mode 100644 kindred-sdk/personal_crm_client/api/calendar/calendar_get_calendar_month.py create mode 100644 kindred-sdk/personal_crm_client/api/carddav/__init__.py create mode 100644 kindred-sdk/personal_crm_client/api/carddav/carddav_well_known_carddav.py create mode 100644 kindred-sdk/personal_crm_client/api/contact_fields/__init__.py create mode 100644 kindred-sdk/personal_crm_client/api/contact_fields/contact_fields_create_contact_field_route.py create mode 100644 kindred-sdk/personal_crm_client/api/contact_fields/contact_fields_delete_contact_field.py create mode 100644 kindred-sdk/personal_crm_client/api/contact_fields/contact_fields_list_contact_fields.py create mode 100644 kindred-sdk/personal_crm_client/api/contact_fields/contact_fields_update_contact_field.py create mode 100644 kindred-sdk/personal_crm_client/api/contacts/__init__.py create mode 100644 kindred-sdk/personal_crm_client/api/contacts/contacts_create_contact.py create mode 100644 kindred-sdk/personal_crm_client/api/contacts/contacts_delete_contact.py create mode 100644 kindred-sdk/personal_crm_client/api/contacts/contacts_get_contact.py create mode 100644 kindred-sdk/personal_crm_client/api/contacts/contacts_get_contact_household.py create mode 100644 kindred-sdk/personal_crm_client/api/contacts/contacts_list_contact_mentions.py create mode 100644 kindred-sdk/personal_crm_client/api/contacts/contacts_list_contacts.py create mode 100644 kindred-sdk/personal_crm_client/api/contacts/contacts_list_losing_touch.py create mode 100644 kindred-sdk/personal_crm_client/api/contacts/contacts_restore_contact.py create mode 100644 kindred-sdk/personal_crm_client/api/contacts/contacts_update_contact.py create mode 100644 kindred-sdk/personal_crm_client/api/custom_fields/__init__.py create mode 100644 kindred-sdk/personal_crm_client/api/custom_fields/custom_fields_create_field_definition.py create mode 100644 kindred-sdk/personal_crm_client/api/custom_fields/custom_fields_create_field_value.py create mode 100644 kindred-sdk/personal_crm_client/api/custom_fields/custom_fields_delete_field_definition.py create mode 100644 kindred-sdk/personal_crm_client/api/custom_fields/custom_fields_delete_field_value.py create mode 100644 kindred-sdk/personal_crm_client/api/custom_fields/custom_fields_list_field_definitions.py create mode 100644 kindred-sdk/personal_crm_client/api/custom_fields/custom_fields_list_field_values.py create mode 100644 kindred-sdk/personal_crm_client/api/custom_fields/custom_fields_update_field_definition.py create mode 100644 kindred-sdk/personal_crm_client/api/custom_fields/custom_fields_update_field_value.py create mode 100644 kindred-sdk/personal_crm_client/api/debts/__init__.py create mode 100644 kindred-sdk/personal_crm_client/api/debts/debts_create_debt_route.py create mode 100644 kindred-sdk/personal_crm_client/api/debts/debts_delete_debt.py create mode 100644 kindred-sdk/personal_crm_client/api/debts/debts_list_debts.py create mode 100644 kindred-sdk/personal_crm_client/api/debts/debts_update_debt.py create mode 100644 kindred-sdk/personal_crm_client/api/gifts/__init__.py create mode 100644 kindred-sdk/personal_crm_client/api/gifts/gifts_create_gift_route.py create mode 100644 kindred-sdk/personal_crm_client/api/gifts/gifts_delete_gift.py create mode 100644 kindred-sdk/personal_crm_client/api/gifts/gifts_list_gifts.py create mode 100644 kindred-sdk/personal_crm_client/api/gifts/gifts_update_gift.py create mode 100644 kindred-sdk/personal_crm_client/api/groups/__init__.py create mode 100644 kindred-sdk/personal_crm_client/api/groups/groups_create_group_route.py create mode 100644 kindred-sdk/personal_crm_client/api/groups/groups_delete_group.py create mode 100644 kindred-sdk/personal_crm_client/api/groups/groups_list_groups.py create mode 100644 kindred-sdk/personal_crm_client/api/groups/groups_update_group.py create mode 100644 kindred-sdk/personal_crm_client/api/import_export/__init__.py create mode 100644 kindred-sdk/personal_crm_client/api/import_export/import_export_export_json.py create mode 100644 kindred-sdk/personal_crm_client/api/import_export/import_export_export_vcard.py create mode 100644 kindred-sdk/personal_crm_client/api/import_export/import_export_import_vcard.py create mode 100644 kindred-sdk/personal_crm_client/api/interactions/__init__.py create mode 100644 kindred-sdk/personal_crm_client/api/interactions/interactions_create_interaction_route.py create mode 100644 kindred-sdk/personal_crm_client/api/interactions/interactions_delete_interaction.py create mode 100644 kindred-sdk/personal_crm_client/api/interactions/interactions_list_interactions.py create mode 100644 kindred-sdk/personal_crm_client/api/interactions/interactions_update_interaction.py create mode 100644 kindred-sdk/personal_crm_client/api/journal/__init__.py create mode 100644 kindred-sdk/personal_crm_client/api/journal/journal_create_journal_entry_route.py create mode 100644 kindred-sdk/personal_crm_client/api/journal/journal_delete_journal_entry.py create mode 100644 kindred-sdk/personal_crm_client/api/journal/journal_list_journal_entries.py create mode 100644 kindred-sdk/personal_crm_client/api/journal/journal_update_journal_entry.py create mode 100644 kindred-sdk/personal_crm_client/api/life_events/__init__.py create mode 100644 kindred-sdk/personal_crm_client/api/life_events/life_events_create_life_event_route.py create mode 100644 kindred-sdk/personal_crm_client/api/life_events/life_events_delete_life_event.py create mode 100644 kindred-sdk/personal_crm_client/api/life_events/life_events_list_life_events.py create mode 100644 kindred-sdk/personal_crm_client/api/life_events/life_events_update_life_event.py create mode 100644 kindred-sdk/personal_crm_client/api/login/__init__.py create mode 100644 kindred-sdk/personal_crm_client/api/login/login_login_access_token.py create mode 100644 kindred-sdk/personal_crm_client/api/login/login_recover_password.py create mode 100644 kindred-sdk/personal_crm_client/api/login/login_recover_password_html_content.py create mode 100644 kindred-sdk/personal_crm_client/api/login/login_reset_password.py create mode 100644 kindred-sdk/personal_crm_client/api/login/login_test_token.py create mode 100644 kindred-sdk/personal_crm_client/api/media_recommendations/__init__.py create mode 100644 kindred-sdk/personal_crm_client/api/media_recommendations/media_recommendations_create_media_recommendation_route.py create mode 100644 kindred-sdk/personal_crm_client/api/media_recommendations/media_recommendations_delete_media_recommendation.py create mode 100644 kindred-sdk/personal_crm_client/api/media_recommendations/media_recommendations_list_media_recommendations.py create mode 100644 kindred-sdk/personal_crm_client/api/media_recommendations/media_recommendations_update_media_recommendation.py create mode 100644 kindred-sdk/personal_crm_client/api/notes/__init__.py create mode 100644 kindred-sdk/personal_crm_client/api/notes/notes_create_note_route.py create mode 100644 kindred-sdk/personal_crm_client/api/notes/notes_delete_note.py create mode 100644 kindred-sdk/personal_crm_client/api/notes/notes_list_notes.py create mode 100644 kindred-sdk/personal_crm_client/api/notes/notes_update_note_route.py create mode 100644 kindred-sdk/personal_crm_client/api/pets/__init__.py create mode 100644 kindred-sdk/personal_crm_client/api/pets/pets_create_pet_route.py create mode 100644 kindred-sdk/personal_crm_client/api/pets/pets_delete_pet.py create mode 100644 kindred-sdk/personal_crm_client/api/pets/pets_list_pets.py create mode 100644 kindred-sdk/personal_crm_client/api/pets/pets_update_pet.py create mode 100644 kindred-sdk/personal_crm_client/api/private/__init__.py create mode 100644 kindred-sdk/personal_crm_client/api/private/private_create_user.py create mode 100644 kindred-sdk/personal_crm_client/api/relationships/__init__.py create mode 100644 kindred-sdk/personal_crm_client/api/relationships/relationships_create_relationship_route.py create mode 100644 kindred-sdk/personal_crm_client/api/relationships/relationships_delete_relationship.py create mode 100644 kindred-sdk/personal_crm_client/api/relationships/relationships_list_relationships.py create mode 100644 kindred-sdk/personal_crm_client/api/relationships/relationships_lookup_inverse.py create mode 100644 kindred-sdk/personal_crm_client/api/relationships/relationships_update_relationship.py create mode 100644 kindred-sdk/personal_crm_client/api/reminders/__init__.py create mode 100644 kindred-sdk/personal_crm_client/api/reminders/reminders_create_reminder_route.py create mode 100644 kindred-sdk/personal_crm_client/api/reminders/reminders_delete_reminder.py create mode 100644 kindred-sdk/personal_crm_client/api/reminders/reminders_list_reminders.py create mode 100644 kindred-sdk/personal_crm_client/api/reminders/reminders_snooze_reminder.py create mode 100644 kindred-sdk/personal_crm_client/api/reminders/reminders_update_reminder.py create mode 100644 kindred-sdk/personal_crm_client/api/tag_shares/__init__.py create mode 100644 kindred-sdk/personal_crm_client/api/tag_shares/tag_shares_create_tag_share.py create mode 100644 kindred-sdk/personal_crm_client/api/tag_shares/tag_shares_delete_tag_share.py create mode 100644 kindred-sdk/personal_crm_client/api/tag_shares/tag_shares_list_tag_shares.py create mode 100644 kindred-sdk/personal_crm_client/api/tags/__init__.py create mode 100644 kindred-sdk/personal_crm_client/api/tags/tags_create_tag_route.py create mode 100644 kindred-sdk/personal_crm_client/api/tags/tags_delete_tag.py create mode 100644 kindred-sdk/personal_crm_client/api/tags/tags_list_tags.py create mode 100644 kindred-sdk/personal_crm_client/api/tags/tags_update_tag.py create mode 100644 kindred-sdk/personal_crm_client/api/users/__init__.py create mode 100644 kindred-sdk/personal_crm_client/api/users/users_create_user.py create mode 100644 kindred-sdk/personal_crm_client/api/users/users_delete_user.py create mode 100644 kindred-sdk/personal_crm_client/api/users/users_delete_user_me.py create mode 100644 kindred-sdk/personal_crm_client/api/users/users_read_user_by_id.py create mode 100644 kindred-sdk/personal_crm_client/api/users/users_read_user_me.py create mode 100644 kindred-sdk/personal_crm_client/api/users/users_read_users.py create mode 100644 kindred-sdk/personal_crm_client/api/users/users_register_user.py create mode 100644 kindred-sdk/personal_crm_client/api/users/users_update_password_me.py create mode 100644 kindred-sdk/personal_crm_client/api/users/users_update_user.py create mode 100644 kindred-sdk/personal_crm_client/api/users/users_update_user_me.py create mode 100644 kindred-sdk/personal_crm_client/api/utils/__init__.py create mode 100644 kindred-sdk/personal_crm_client/api/utils/utils_health_check.py create mode 100644 kindred-sdk/personal_crm_client/api/utils/utils_test_email.py create mode 100644 kindred-sdk/personal_crm_client/api/webhooks/__init__.py create mode 100644 kindred-sdk/personal_crm_client/api/webhooks/webhooks_create_webhook.py create mode 100644 kindred-sdk/personal_crm_client/api/webhooks/webhooks_delete_webhook.py create mode 100644 kindred-sdk/personal_crm_client/api/webhooks/webhooks_inbound_webhook.py create mode 100644 kindred-sdk/personal_crm_client/api/webhooks/webhooks_list_webhooks.py create mode 100644 kindred-sdk/personal_crm_client/api/webhooks/webhooks_update_webhook.py create mode 100644 kindred-sdk/personal_crm_client/client.py create mode 100644 kindred-sdk/personal_crm_client/errors.py create mode 100644 kindred-sdk/personal_crm_client/models/__init__.py create mode 100644 kindred-sdk/personal_crm_client/models/activity_log_public.py create mode 100644 kindred-sdk/personal_crm_client/models/activity_log_public_changes_json_type_0.py create mode 100644 kindred-sdk/personal_crm_client/models/activity_logs_public.py create mode 100644 kindred-sdk/personal_crm_client/models/address_create.py create mode 100644 kindred-sdk/personal_crm_client/models/address_public.py create mode 100644 kindred-sdk/personal_crm_client/models/address_update.py create mode 100644 kindred-sdk/personal_crm_client/models/body_import_export_import_vcard.py create mode 100644 kindred-sdk/personal_crm_client/models/body_login_login_access_token.py create mode 100644 kindred-sdk/personal_crm_client/models/calendar_entry.py create mode 100644 kindred-sdk/personal_crm_client/models/calendar_month_response.py create mode 100644 kindred-sdk/personal_crm_client/models/calendar_month_response_days.py create mode 100644 kindred-sdk/personal_crm_client/models/contact_create.py create mode 100644 kindred-sdk/personal_crm_client/models/contact_field_create.py create mode 100644 kindred-sdk/personal_crm_client/models/contact_field_public.py create mode 100644 kindred-sdk/personal_crm_client/models/contact_field_type.py create mode 100644 kindred-sdk/personal_crm_client/models/contact_field_update.py create mode 100644 kindred-sdk/personal_crm_client/models/contact_public.py create mode 100644 kindred-sdk/personal_crm_client/models/contact_update.py create mode 100644 kindred-sdk/personal_crm_client/models/contacts_public.py create mode 100644 kindred-sdk/personal_crm_client/models/custom_field_definition_create.py create mode 100644 kindred-sdk/personal_crm_client/models/custom_field_definition_public.py create mode 100644 kindred-sdk/personal_crm_client/models/custom_field_definition_update.py create mode 100644 kindred-sdk/personal_crm_client/models/custom_field_value_create.py create mode 100644 kindred-sdk/personal_crm_client/models/custom_field_value_public.py create mode 100644 kindred-sdk/personal_crm_client/models/custom_field_value_update.py create mode 100644 kindred-sdk/personal_crm_client/models/debt_create.py create mode 100644 kindred-sdk/personal_crm_client/models/debt_direction.py create mode 100644 kindred-sdk/personal_crm_client/models/debt_public.py create mode 100644 kindred-sdk/personal_crm_client/models/debt_update.py create mode 100644 kindred-sdk/personal_crm_client/models/debts_public.py create mode 100644 kindred-sdk/personal_crm_client/models/gift_create.py create mode 100644 kindred-sdk/personal_crm_client/models/gift_public.py create mode 100644 kindred-sdk/personal_crm_client/models/gift_status.py create mode 100644 kindred-sdk/personal_crm_client/models/gift_update.py create mode 100644 kindred-sdk/personal_crm_client/models/gifts_public.py create mode 100644 kindred-sdk/personal_crm_client/models/group_create.py create mode 100644 kindred-sdk/personal_crm_client/models/group_public.py create mode 100644 kindred-sdk/personal_crm_client/models/group_update.py create mode 100644 kindred-sdk/personal_crm_client/models/groups_public.py create mode 100644 kindred-sdk/personal_crm_client/models/http_validation_error.py create mode 100644 kindred-sdk/personal_crm_client/models/interaction_attendee_summary.py create mode 100644 kindred-sdk/personal_crm_client/models/interaction_channel.py create mode 100644 kindred-sdk/personal_crm_client/models/interaction_create.py create mode 100644 kindred-sdk/personal_crm_client/models/interaction_public.py create mode 100644 kindred-sdk/personal_crm_client/models/interaction_update.py create mode 100644 kindred-sdk/personal_crm_client/models/interactions_public.py create mode 100644 kindred-sdk/personal_crm_client/models/journal_entries_public.py create mode 100644 kindred-sdk/personal_crm_client/models/journal_entry_create.py create mode 100644 kindred-sdk/personal_crm_client/models/journal_entry_public.py create mode 100644 kindred-sdk/personal_crm_client/models/journal_entry_update.py create mode 100644 kindred-sdk/personal_crm_client/models/life_event_create.py create mode 100644 kindred-sdk/personal_crm_client/models/life_event_public.py create mode 100644 kindred-sdk/personal_crm_client/models/life_event_update.py create mode 100644 kindred-sdk/personal_crm_client/models/life_events_public.py create mode 100644 kindred-sdk/personal_crm_client/models/media_category.py create mode 100644 kindred-sdk/personal_crm_client/models/media_recommendation_create.py create mode 100644 kindred-sdk/personal_crm_client/models/media_recommendation_public.py create mode 100644 kindred-sdk/personal_crm_client/models/media_recommendation_update.py create mode 100644 kindred-sdk/personal_crm_client/models/media_recommendations_public.py create mode 100644 kindred-sdk/personal_crm_client/models/mention_source_contact.py create mode 100644 kindred-sdk/personal_crm_client/models/message.py create mode 100644 kindred-sdk/personal_crm_client/models/new_password.py create mode 100644 kindred-sdk/personal_crm_client/models/note_create.py create mode 100644 kindred-sdk/personal_crm_client/models/note_mention_public.py create mode 100644 kindred-sdk/personal_crm_client/models/note_public.py create mode 100644 kindred-sdk/personal_crm_client/models/note_update.py create mode 100644 kindred-sdk/personal_crm_client/models/notes_public.py create mode 100644 kindred-sdk/personal_crm_client/models/pet_create.py create mode 100644 kindred-sdk/personal_crm_client/models/pet_public.py create mode 100644 kindred-sdk/personal_crm_client/models/pet_update.py create mode 100644 kindred-sdk/personal_crm_client/models/private_user_create.py create mode 100644 kindred-sdk/personal_crm_client/models/relationship_create.py create mode 100644 kindred-sdk/personal_crm_client/models/relationship_public.py create mode 100644 kindred-sdk/personal_crm_client/models/relationship_update.py create mode 100644 kindred-sdk/personal_crm_client/models/relationships_lookup_inverse_response_relationships_lookup_inverse.py create mode 100644 kindred-sdk/personal_crm_client/models/reminder_create.py create mode 100644 kindred-sdk/personal_crm_client/models/reminder_frequency.py create mode 100644 kindred-sdk/personal_crm_client/models/reminder_public.py create mode 100644 kindred-sdk/personal_crm_client/models/reminder_update.py create mode 100644 kindred-sdk/personal_crm_client/models/reminders_public.py create mode 100644 kindred-sdk/personal_crm_client/models/share_in.py create mode 100644 kindred-sdk/personal_crm_client/models/tag_create.py create mode 100644 kindred-sdk/personal_crm_client/models/tag_public.py create mode 100644 kindred-sdk/personal_crm_client/models/tag_share_public.py create mode 100644 kindred-sdk/personal_crm_client/models/tag_shares_delete_tag_share_response_tag_shares_delete_tag_share.py create mode 100644 kindred-sdk/personal_crm_client/models/tag_shares_public.py create mode 100644 kindred-sdk/personal_crm_client/models/tag_update.py create mode 100644 kindred-sdk/personal_crm_client/models/tags_public.py create mode 100644 kindred-sdk/personal_crm_client/models/token.py create mode 100644 kindred-sdk/personal_crm_client/models/update_password.py create mode 100644 kindred-sdk/personal_crm_client/models/user_create.py create mode 100644 kindred-sdk/personal_crm_client/models/user_public.py create mode 100644 kindred-sdk/personal_crm_client/models/user_register.py create mode 100644 kindred-sdk/personal_crm_client/models/user_update.py create mode 100644 kindred-sdk/personal_crm_client/models/user_update_me.py create mode 100644 kindred-sdk/personal_crm_client/models/users_public.py create mode 100644 kindred-sdk/personal_crm_client/models/validation_error.py create mode 100644 kindred-sdk/personal_crm_client/models/validation_error_context.py create mode 100644 kindred-sdk/personal_crm_client/models/webhook_endpoint_base.py create mode 100644 kindred-sdk/personal_crm_client/models/webhooks_inbound_webhook_payload.py create mode 100644 kindred-sdk/personal_crm_client/py.typed create mode 100644 kindred-sdk/personal_crm_client/types.py create mode 100644 kindred-sdk/pyproject.toml create mode 100644 openapi.json diff --git a/kind b/kind new file mode 100644 index 00000000..7939e044 --- /dev/null +++ b/kind @@ -0,0 +1,120 @@ +# Kindred SDK + +A typed Python client for [Personal CRM](https://github.com/willff/personal-crm) (Kindred), generated from its OpenAPI schema. + +## Installation + +```bash +pip install kindred-sdk +``` + +Or with Poetry: + +```bash +poetry add kindred-sdk +``` + +## Quick Start + +```python +from kindred_sdk import KindredClient + +# Create a client (unauthenticated) +client = KindredClient(base_url="https://kindred.example.com") + +# Or with authentication +client = KindredClient( + base_url="https://kindred.example.com", + token="your-api-token" +) + +# List contacts +contacts = client.contacts.list() +for contact in contacts.data: + print(contact.name) + +# Get a specific contact +contact = client.contacts.get(contact_id="uuid-here") + +# Create a contact +from personal_crm_client.models import ContactCreate +new_contact = client.contacts.create( + ContactCreate(name="John Doe", email="john@example.com") +) + +# Async support +import asyncio + +async def main(): + contacts = await client.contacts.list_async() + print(contacts) + +asyncio.run(main()) +``` + +## Available Resources + +The SDK provides a thin facade over the generated OpenAPI client with these resources: + +| Resource | Methods | +|----------|---------| +| `client.contacts` | `list()`, `get()`, `create()`, `update()`, `delete()`, `restore()`, `list_mentions()`, `get_household()` | +| `client.groups` | `list()`, `get()`, `create()`, `update()`, `delete()` | +| `client.interactions` | `list()`, `get()`, `create()`, `update()`, `delete()` | +| `client.tags` | `list()`, `get()`, `create()`, `update()`, `delete()` | +| `client.notes` | `list()`, `get()`, `create()`, `update()`, `delete()` | +| `client.gifts` | `list()`, `get()`, `create()`, `update()`, `delete()` | +| `client.debts` | `list()`, `get()`, `create()`, `update()`, `delete()` | +| `client.pets` | `list()`, `get()`, `create()`, `update()`, `delete()` | +| `client.addresses` | `list()`, `get()`, `create()`, `update()`, `delete()` | +| `client.relationships` | `list()`, `get()`, `create()`, `update()`, `delete()` | +| `client.reminders` | `list()`, `get()`, `create()`, `update()`, `delete()` | +| `client.life_events` | `list()`, `get()`, `create()`, `update()`, `delete()` | +| `client.journal` | `list()`, `get()`, `create()`, `update()`, `delete()` | +| `client.custom_fields` | `list_definitions()`, `create_definition()`, `update_definition()`, `delete_definition()`, `list_values()`, `create_value()`, `update_value()`, `delete_value()` | +| `client.activity_logs` | `list()` | +| `client.calendar` | `get_month()` | + +## Regenerating the SDK + +The SDK is generated from the backend's OpenAPI schema using [`openapi-python-client`](https://github.com/openapi-generators/openapi-python-client): + +```bash +# Fetch the OpenAPI schema +curl http://localhost:8000/api/v1/openapi.json > openapi.json + +# Generate the client +openapi-python-client generate --path openapi.json --output-path kindred-sdk --overwrite + +# The kindred_sdk/ package wraps the generated personal_crm_client/ +``` + +## Schema Drift Detection + +The CI workflow (`.github/workflows/sdk-drift.yml`) automatically: +1. Fetches the OpenAPI schema from the running backend +2. Regenerates the SDK +3. Fails if there are changes (indicating the SDK is out of date) + +To manually check for drift: + +```bash +just sdk-check # If added to justfile +``` + +## Development + +```bash +# Install dependencies +pip install -e kindred-sdk/ + +# Run type checks +cd kindred-sdk && pyright + +# Build the package +cd kindred-sdk && pip build +``` + +## License + +MIT (same as Personal CRM) diff --git a/kindred b/kindred new file mode 100644 index 00000000..7108486a --- /dev/null +++ b/kindred @@ -0,0 +1,23 @@ +"""Calendar resource for Kindred SDK.""" + +from personal_crm_client import AuthenticatedClient, Client +from personal_crm_client.models import CalendarMonthResponse +from personal_crm_client.models import HTTPValidationError +from uuid import UUID + + +class CalendarResource: + """Resource for calendar operations.""" + + def __init__(self, client: AuthenticatedClient | Client): + self._client = client + + def get_month(self, *, year: int, month: int) -> CalendarMonthResponse | HTTPValidationError | None: + """Get calendar data for a specific month.""" + from personal_crm_client.api.calendar import calendar_get_calendar_month + return calendar_get_calendar_month.sync(client=self._client, year=year, month=month) + + async def get_month_async(self, *, year: int, month: int) -> CalendarMonthResponse | HTTPValidationError | None: + """Async version of get_month().""" + from personal_crm_client.api.calendar import calendar_get_calendar_month + return await calendar_get_calendar_month.asyncio(client=self._client, year=year, month=month) diff --git a/kindred-sdk/.gitignore b/kindred-sdk/.gitignore new file mode 100644 index 00000000..79a2c3d7 --- /dev/null +++ b/kindred-sdk/.gitignore @@ -0,0 +1,23 @@ +__pycache__/ +build/ +dist/ +*.egg-info/ +.pytest_cache/ + +# pyenv +.python-version + +# Environments +.env +.venv + +# mypy +.mypy_cache/ +.dmypy.json +dmypy.json + +# JetBrains +.idea/ + +/coverage.xml +/.coverage diff --git a/kindred-sdk/README.md b/kindred-sdk/README.md new file mode 100644 index 00000000..8aa648f4 --- /dev/null +++ b/kindred-sdk/README.md @@ -0,0 +1,124 @@ +# personal-crm-client +A client library for accessing Personal CRM + +## Usage +First, create a client: + +```python +from personal_crm_client import Client + +client = Client(base_url="https://api.example.com") +``` + +If the endpoints you're going to hit require authentication, use `AuthenticatedClient` instead: + +```python +from personal_crm_client import AuthenticatedClient + +client = AuthenticatedClient(base_url="https://api.example.com", token="SuperSecretToken") +``` + +Now call your endpoint and use your models: + +```python +from personal_crm_client.models import MyDataModel +from personal_crm_client.api.my_tag import get_my_data_model +from personal_crm_client.types import Response + +with client as client: + my_data: MyDataModel = get_my_data_model.sync(client=client) + # or if you need more info (e.g. status_code) + response: Response[MyDataModel] = get_my_data_model.sync_detailed(client=client) +``` + +Or do the same thing with an async version: + +```python +from personal_crm_client.models import MyDataModel +from personal_crm_client.api.my_tag import get_my_data_model +from personal_crm_client.types import Response + +async with client as client: + my_data: MyDataModel = await get_my_data_model.asyncio(client=client) + response: Response[MyDataModel] = await get_my_data_model.asyncio_detailed(client=client) +``` + +By default, when you're calling an HTTPS API it will attempt to verify that SSL is working correctly. Using certificate verification is highly recommended most of the time, but sometimes you may need to authenticate to a server (especially an internal server) using a custom certificate bundle. + +```python +client = AuthenticatedClient( + base_url="https://internal_api.example.com", + token="SuperSecretToken", + verify_ssl="/path/to/certificate_bundle.pem", +) +``` + +You can also disable certificate validation altogether, but beware that **this is a security risk**. + +```python +client = AuthenticatedClient( + base_url="https://internal_api.example.com", + token="SuperSecretToken", + verify_ssl=False +) +``` + +Things to know: +1. Every path/method combo becomes a Python module with four functions: + 1. `sync`: Blocking request that returns parsed data (if successful) or `None` + 1. `sync_detailed`: Blocking request that always returns a `Request`, optionally with `parsed` set if the request was successful. + 1. `asyncio`: Like `sync` but async instead of blocking + 1. `asyncio_detailed`: Like `sync_detailed` but async instead of blocking + +1. All path/query params, and bodies become method arguments. +1. If your endpoint had any tags on it, the first tag will be used as a module name for the function (my_tag above) +1. Any endpoint which did not have a tag will be in `personal_crm_client.api.default` + +## Advanced customizations + +There are more settings on the generated `Client` class which let you control more runtime behavior, check out the docstring on that class for more info. You can also customize the underlying `httpx.Client` or `httpx.AsyncClient` (depending on your use-case): + +```python +from personal_crm_client import Client + +def log_request(request): + print(f"Request event hook: {request.method} {request.url} - Waiting for response") + +def log_response(response): + request = response.request + print(f"Response event hook: {request.method} {request.url} - Status {response.status_code}") + +client = Client( + base_url="https://api.example.com", + httpx_args={"event_hooks": {"request": [log_request], "response": [log_response]}}, +) + +# Or get the underlying httpx client to modify directly with client.get_httpx_client() or client.get_async_httpx_client() +``` + +You can even set the httpx client directly, but beware that this will override any existing settings (e.g., base_url): + +```python +import httpx +from personal_crm_client import Client + +client = Client( + base_url="https://api.example.com", +) +# Note that base_url needs to be re-set, as would any shared cookies, headers, etc. +client.set_httpx_client(httpx.Client(base_url="https://api.example.com", proxies="http://localhost:8030")) +``` + +## Building / publishing this package +This project uses [Poetry](https://python-poetry.org/) to manage dependencies and packaging. Here are the basics: +1. Update the metadata in pyproject.toml (e.g. authors, version) +1. If you're using a private repository, configure it with Poetry + 1. `poetry config repositories. ` + 1. `poetry config http-basic. ` +1. Publish the client with `poetry publish --build -r ` or, if for public PyPI, just `poetry publish --build` + +If you want to install this client into another project without publishing it (e.g. for development) then: +1. If that project **is using Poetry**, you can simply do `poetry add ` from that project +1. If that project is not using Poetry: + 1. Build a wheel with `poetry build -f wheel` + 1. Install that wheel from the other project `pip install ` diff --git a/kindred-sdk/kindred_sdk/__init__.py b/kindred-sdk/kindred_sdk/__init__.py new file mode 100644 index 00000000..fd340fba --- /dev/null +++ b/kindred-sdk/kindred_sdk/__init__.py @@ -0,0 +1,39 @@ +"""Kindred SDK - A typed Python client for Personal CRM.""" + +from .client import KindredClient +from .resources.contacts import ContactsResource +from .resources.groups import GroupsResource +from .resources.interactions import InteractionsResource +from .resources.tags import TagsResource +from .resources.notes import NotesResource +from .resources.gifts import GiftsResource +from .resources.debts import DebtsResource +from .resources.pets import PetsResource +from .resources.addresses import AddressesResource +from .resources.relationships import RelationshipsResource +from .resources.reminders import RemindersResource +from .resources.life_events import LifeEventsResource +from .resources.journal import JournalResource +from .resources.custom_fields import CustomFieldsResource +from .resources.activity_logs import ActivityLogsResource +from .resources.calendar import CalendarResource + +__all__ = [ + "KindredClient", + "ContactsResource", + "GroupsResource", + "InteractionsResource", + "TagsResource", + "NotesResource", + "GiftsResource", + "DebtsResource", + "PetsResource", + "AddressesResource", + "RelationshipsResource", + "RemindersResource", + "LifeEventsResource", + "JournalResource", + "CustomFieldsResource", + "ActivityLogsResource", + "CalendarResource", +] diff --git a/kindred-sdk/kindred_sdk/client.py b/kindred-sdk/kindred_sdk/client.py new file mode 100644 index 00000000..e69de29b diff --git a/kindred-sdk/kindred_sdk/resources/__init__.py b/kindred-sdk/kindred_sdk/resources/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/kindred-sdk/kindred_sdk/resources/addresses.py b/kindred-sdk/kindred_sdk/resources/addresses.py new file mode 100644 index 00000000..687dafad --- /dev/null +++ b/kindred-sdk/kindred_sdk/resources/addresses.py @@ -0,0 +1,63 @@ +"""{resource_name} resource for Kindred SDK.""" + +from personal_crm_client import AuthenticatedClient, Client +from personal_crm_client.models import {model}Create, {model}Update, {models}, {model}Public +from personal_crm_client.models import HTTPValidationError +from uuid import UUID + + +class {class_name}: + """Resource for managing {module}.""" + + def __init__(self, client: AuthenticatedClient | Client): + self._client = client + + def list(self, *, skip: int = 0, limit: int = 100) -> {models} | HTTPValidationError | None: + """List {module}.""" + from personal_crm_client.api.{module} import {list_func} + return {list_func}.sync(client=self._client, skip=skip, limit=limit) + + async def list_async(self, *, skip: int = 0, limit: int = 100) -> {models} | HTTPValidationError | None: + """Async version of list().""" + from personal_crm_client.api.{module} import {list_func} + return await {list_func}.asyncio(client=self._client, skip=skip, limit=limit) + + def get(self, {item_id}: UUID) -> {model}Public | HTTPValidationError | None: + """Get a single {singular} by ID.""" + from personal_crm_client.api.{module} import {get_func} + return {get_func}.sync(client=self._client, {item_id}={item_id}) + + async def get_async(self, {item_id}: UUID) -> {model}Public | HTTPValidationError | None: + """Async version of get().""" + from personal_crm_client.api.{module} import {get_func} + return await {get_func}.asyncio(client=self._client, {item_id}={item_id}) + + def create(self, item: {model}Create) -> {model}Public | HTTPValidationError | None: + """Create a new {singular}.""" + from personal_crm_client.api.{module} import {create_func} + return {create_func}.sync(client=self._client, json_body=item) + + async def create_async(self, item: {model}Create) -> {model}Public | HTTPValidationError | None: + """Async version of create().""" + from personal_crm_client.api.{module} import {create_func} + return await {create_func}.asyncio(client=self._client, json_body=item) + + def update(self, {item_id}: UUID, item: {model}Update) -> {model}Public | HTTPValidationError | None: + """Update an existing {singular}.""" + from personal_crm_client.api.{module} import {update_func} + return {update_func}.sync(client=self._client, {item_id}={item_id}, json_body=item) + + async def update_async(self, {item_id}: UUID, item: {model}Update) -> {model}Public | HTTPValidationError | None: + """Async version of update().""" + from personal_crm_client.api.{module} import {update_func} + return await {update_func}.asyncio(client=self._client, {item_id}={item_id}, json_body=item) + + def delete(self, {item_id}: UUID) -> {model}Public | HTTPValidationError | None: + """Delete a {singular}.""" + from personal_crm_client.api.{module} import {delete_func} + return {delete_func}.sync(client=self._client, {item_id}={item_id}) + + async def delete_async(self, {item_id}: UUID) -> {model}Public | HTTPValidationError | None: + """Async version of delete().""" + from personal_crm_client.api.{module} import {delete_func} + return await {delete_func}.asyncio(client=self._client, {item_id}={item_id}) diff --git a/kindred-sdk/kindred_sdk/resources/custom_fields.py b/kindred-sdk/kindred_sdk/resources/custom_fields.py new file mode 100644 index 00000000..52f58930 --- /dev/null +++ b/kindred-sdk/kindred_sdk/resources/custom_fields.py @@ -0,0 +1,99 @@ +"""CustomFields resource for Kindred SDK.""" + +from personal_crm_client import AuthenticatedClient, Client +from personal_crm_client.models import ( + CustomFieldDefinitionCreate, CustomFieldDefinitionUpdate, CustomFieldDefinitionsPublic, + CustomFieldDefinitionPublic, CustomFieldValueCreate, CustomFieldValueUpdate, + CustomFieldValuesPublic, CustomFieldValuePublic +) +from personal_crm_client.models import HTTPValidationError +from uuid import UUID + + +class CustomFieldsResource: + """Resource for managing custom field definitions and values.""" + + def __init__(self, client: AuthenticatedClient | Client): + self._client = client + + # Field Definitions + def list_definitions(self, *, skip: int = 0, limit: int = 100) -> CustomFieldDefinitionsPublic | HTTPValidationError | None: + """List custom field definitions.""" + from personal_crm_client.api.custom_fields import custom_fields_list_field_definitions + return custom_fields_list_field_definitions.sync(client=self._client, skip=skip, limit=limit) + + async def list_definitions_async(self, *, skip: int = 0, limit: int = 100) -> CustomFieldDefinitionsPublic | HTTPValidationError | None: + """Async version of list_definitions().""" + from personal_crm_client.api.custom_fields import custom_fields_list_field_definitions + return await custom_fields_list_field_definitions.asyncio(client=self._client, skip=skip, limit=limit) + + def create_definition(self, definition: CustomFieldDefinitionCreate) -> CustomFieldDefinitionPublic | HTTPValidationError | None: + """Create a new custom field definition.""" + from personal_crm_client.api.custom_fields import custom_fields_create_field_definition + return custom_fields_create_field_definition.sync(client=self._client, json_body=definition) + + async def create_definition_async(self, definition: CustomFieldDefinitionCreate) -> CustomFieldDefinitionPublic | HTTPValidationError | None: + """Async version of create_definition().""" + from personal_crm_client.api.custom_fields import custom_fields_create_field_definition + return await custom_fields_create_field_definition.asyncio(client=self._client, json_body=definition) + + def update_definition(self, field_id: UUID, definition: CustomFieldDefinitionUpdate) -> CustomFieldDefinitionPublic | HTTPValidationError | None: + """Update a custom field definition.""" + from personal_crm_client.api.custom_fields import custom_fields_update_field_definition + return custom_fields_update_field_definition.sync(client=self._client, field_id=field_id, json_body=definition) + + async def update_definition_async(self, field_id: UUID, definition: CustomFieldDefinitionUpdate) -> CustomFieldDefinitionPublic | HTTPValidationError | None: + """Async version of update_definition().""" + from personal_crm_client.api.custom_fields import custom_fields_update_field_definition + return await custom_fields_update_field_definition.asyncio(client=self._client, field_id=field_id, json_body=definition) + + def delete_definition(self, field_id: UUID) -> CustomFieldDefinitionPublic | HTTPValidationError | None: + """Delete a custom field definition.""" + from personal_crm_client.api.custom_fields import custom_fields_delete_field_definition + return custom_fields_delete_field_definition.sync(client=self._client, field_id=field_id) + + async def delete_definition_async(self, field_id: UUID) -> CustomFieldDefinitionPublic | HTTPValidationError | None: + """Async version of delete_definition().""" + from personal_crm_client.api.custom_fields import custom_fields_delete_field_definition + return await custom_fields_delete_field_definition.asyncio(client=self._client, field_id=field_id) + + # Field Values + def list_values(self, *, contact_id: UUID, skip: int = 0, limit: int = 100) -> CustomFieldValuesPublic | HTTPValidationError | None: + """List custom field values for a contact.""" + from personal_crm_client.api.custom_fields import custom_fields_list_field_values + return custom_fields_list_field_values.sync(client=self._client, contact_id=contact_id, skip=skip, limit=limit) + + async def list_values_async(self, *, contact_id: UUID, skip: int = 0, limit: int = 100) -> CustomFieldValuesPublic | HTTPValidationError | None: + """Async version of list_values().""" + from personal_crm_client.api.custom_fields import custom_fields_list_field_values + return await custom_fields_list_field_values.asyncio(client=self._client, contact_id=contact_id, skip=skip, limit=limit) + + def create_value(self, value: CustomFieldValueCreate) -> CustomFieldValuePublic | HTTPValidationError | None: + """Create a new custom field value.""" + from personal_crm_client.api.custom_fields import custom_fields_create_field_value + return custom_fields_create_field_value.sync(client=self._client, json_body=value) + + async def create_value_async(self, value: CustomFieldValueCreate) -> CustomFieldValuePublic | HTTPValidationError | None: + """Async version of create_value().""" + from personal_crm_client.api.custom_fields import custom_fields_create_field_value + return await custom_fields_create_field_value.asyncio(client=self._client, json_body=value) + + def update_value(self, value_id: UUID, value: CustomFieldValueUpdate) -> CustomFieldValuePublic | HTTPValidationError | None: + """Update a custom field value.""" + from personal_crm_client.api.custom_fields import custom_fields_update_field_value + return custom_fields_update_field_value.sync(client=self._client, value_id=value_id, json_body=value) + + async def update_value_async(self, value_id: UUID, value: CustomFieldValueUpdate) -> CustomFieldValuePublic | HTTPValidationError | None: + """Async version of update_value().""" + from personal_crm_client.api.custom_fields import custom_fields_update_field_value + return await custom_fields_update_field_value.asyncio(client=self._client, value_id=value_id, json_body=value) + + def delete_value(self, value_id: UUID) -> CustomFieldValuePublic | HTTPValidationError | None: + """Delete a custom field value.""" + from personal_crm_client.api.custom_fields import custom_fields_delete_field_value + return custom_fields_delete_field_value.sync(client=self._client, value_id=value_id) + + async def delete_value_async(self, value_id: UUID) -> CustomFieldValuePublic | HTTPValidationError | None: + """Async version of delete_value().""" + from personal_crm_client.api.custom_fields import custom_fields_delete_field_value + return await custom_fields_delete_field_value.asyncio(client=self._client, value_id=value_id) diff --git a/kindred-sdk/kindred_sdk/resources/debts.py b/kindred-sdk/kindred_sdk/resources/debts.py new file mode 100644 index 00000000..687dafad --- /dev/null +++ b/kindred-sdk/kindred_sdk/resources/debts.py @@ -0,0 +1,63 @@ +"""{resource_name} resource for Kindred SDK.""" + +from personal_crm_client import AuthenticatedClient, Client +from personal_crm_client.models import {model}Create, {model}Update, {models}, {model}Public +from personal_crm_client.models import HTTPValidationError +from uuid import UUID + + +class {class_name}: + """Resource for managing {module}.""" + + def __init__(self, client: AuthenticatedClient | Client): + self._client = client + + def list(self, *, skip: int = 0, limit: int = 100) -> {models} | HTTPValidationError | None: + """List {module}.""" + from personal_crm_client.api.{module} import {list_func} + return {list_func}.sync(client=self._client, skip=skip, limit=limit) + + async def list_async(self, *, skip: int = 0, limit: int = 100) -> {models} | HTTPValidationError | None: + """Async version of list().""" + from personal_crm_client.api.{module} import {list_func} + return await {list_func}.asyncio(client=self._client, skip=skip, limit=limit) + + def get(self, {item_id}: UUID) -> {model}Public | HTTPValidationError | None: + """Get a single {singular} by ID.""" + from personal_crm_client.api.{module} import {get_func} + return {get_func}.sync(client=self._client, {item_id}={item_id}) + + async def get_async(self, {item_id}: UUID) -> {model}Public | HTTPValidationError | None: + """Async version of get().""" + from personal_crm_client.api.{module} import {get_func} + return await {get_func}.asyncio(client=self._client, {item_id}={item_id}) + + def create(self, item: {model}Create) -> {model}Public | HTTPValidationError | None: + """Create a new {singular}.""" + from personal_crm_client.api.{module} import {create_func} + return {create_func}.sync(client=self._client, json_body=item) + + async def create_async(self, item: {model}Create) -> {model}Public | HTTPValidationError | None: + """Async version of create().""" + from personal_crm_client.api.{module} import {create_func} + return await {create_func}.asyncio(client=self._client, json_body=item) + + def update(self, {item_id}: UUID, item: {model}Update) -> {model}Public | HTTPValidationError | None: + """Update an existing {singular}.""" + from personal_crm_client.api.{module} import {update_func} + return {update_func}.sync(client=self._client, {item_id}={item_id}, json_body=item) + + async def update_async(self, {item_id}: UUID, item: {model}Update) -> {model}Public | HTTPValidationError | None: + """Async version of update().""" + from personal_crm_client.api.{module} import {update_func} + return await {update_func}.asyncio(client=self._client, {item_id}={item_id}, json_body=item) + + def delete(self, {item_id}: UUID) -> {model}Public | HTTPValidationError | None: + """Delete a {singular}.""" + from personal_crm_client.api.{module} import {delete_func} + return {delete_func}.sync(client=self._client, {item_id}={item_id}) + + async def delete_async(self, {item_id}: UUID) -> {model}Public | HTTPValidationError | None: + """Async version of delete().""" + from personal_crm_client.api.{module} import {delete_func} + return await {delete_func}.asyncio(client=self._client, {item_id}={item_id}) diff --git a/kindred-sdk/kindred_sdk/resources/gifts.py b/kindred-sdk/kindred_sdk/resources/gifts.py new file mode 100644 index 00000000..687dafad --- /dev/null +++ b/kindred-sdk/kindred_sdk/resources/gifts.py @@ -0,0 +1,63 @@ +"""{resource_name} resource for Kindred SDK.""" + +from personal_crm_client import AuthenticatedClient, Client +from personal_crm_client.models import {model}Create, {model}Update, {models}, {model}Public +from personal_crm_client.models import HTTPValidationError +from uuid import UUID + + +class {class_name}: + """Resource for managing {module}.""" + + def __init__(self, client: AuthenticatedClient | Client): + self._client = client + + def list(self, *, skip: int = 0, limit: int = 100) -> {models} | HTTPValidationError | None: + """List {module}.""" + from personal_crm_client.api.{module} import {list_func} + return {list_func}.sync(client=self._client, skip=skip, limit=limit) + + async def list_async(self, *, skip: int = 0, limit: int = 100) -> {models} | HTTPValidationError | None: + """Async version of list().""" + from personal_crm_client.api.{module} import {list_func} + return await {list_func}.asyncio(client=self._client, skip=skip, limit=limit) + + def get(self, {item_id}: UUID) -> {model}Public | HTTPValidationError | None: + """Get a single {singular} by ID.""" + from personal_crm_client.api.{module} import {get_func} + return {get_func}.sync(client=self._client, {item_id}={item_id}) + + async def get_async(self, {item_id}: UUID) -> {model}Public | HTTPValidationError | None: + """Async version of get().""" + from personal_crm_client.api.{module} import {get_func} + return await {get_func}.asyncio(client=self._client, {item_id}={item_id}) + + def create(self, item: {model}Create) -> {model}Public | HTTPValidationError | None: + """Create a new {singular}.""" + from personal_crm_client.api.{module} import {create_func} + return {create_func}.sync(client=self._client, json_body=item) + + async def create_async(self, item: {model}Create) -> {model}Public | HTTPValidationError | None: + """Async version of create().""" + from personal_crm_client.api.{module} import {create_func} + return await {create_func}.asyncio(client=self._client, json_body=item) + + def update(self, {item_id}: UUID, item: {model}Update) -> {model}Public | HTTPValidationError | None: + """Update an existing {singular}.""" + from personal_crm_client.api.{module} import {update_func} + return {update_func}.sync(client=self._client, {item_id}={item_id}, json_body=item) + + async def update_async(self, {item_id}: UUID, item: {model}Update) -> {model}Public | HTTPValidationError | None: + """Async version of update().""" + from personal_crm_client.api.{module} import {update_func} + return await {update_func}.asyncio(client=self._client, {item_id}={item_id}, json_body=item) + + def delete(self, {item_id}: UUID) -> {model}Public | HTTPValidationError | None: + """Delete a {singular}.""" + from personal_crm_client.api.{module} import {delete_func} + return {delete_func}.sync(client=self._client, {item_id}={item_id}) + + async def delete_async(self, {item_id}: UUID) -> {model}Public | HTTPValidationError | None: + """Async version of delete().""" + from personal_crm_client.api.{module} import {delete_func} + return await {delete_func}.asyncio(client=self._client, {item_id}={item_id}) diff --git a/kindred-sdk/kindred_sdk/resources/groups.py b/kindred-sdk/kindred_sdk/resources/groups.py new file mode 100644 index 00000000..687dafad --- /dev/null +++ b/kindred-sdk/kindred_sdk/resources/groups.py @@ -0,0 +1,63 @@ +"""{resource_name} resource for Kindred SDK.""" + +from personal_crm_client import AuthenticatedClient, Client +from personal_crm_client.models import {model}Create, {model}Update, {models}, {model}Public +from personal_crm_client.models import HTTPValidationError +from uuid import UUID + + +class {class_name}: + """Resource for managing {module}.""" + + def __init__(self, client: AuthenticatedClient | Client): + self._client = client + + def list(self, *, skip: int = 0, limit: int = 100) -> {models} | HTTPValidationError | None: + """List {module}.""" + from personal_crm_client.api.{module} import {list_func} + return {list_func}.sync(client=self._client, skip=skip, limit=limit) + + async def list_async(self, *, skip: int = 0, limit: int = 100) -> {models} | HTTPValidationError | None: + """Async version of list().""" + from personal_crm_client.api.{module} import {list_func} + return await {list_func}.asyncio(client=self._client, skip=skip, limit=limit) + + def get(self, {item_id}: UUID) -> {model}Public | HTTPValidationError | None: + """Get a single {singular} by ID.""" + from personal_crm_client.api.{module} import {get_func} + return {get_func}.sync(client=self._client, {item_id}={item_id}) + + async def get_async(self, {item_id}: UUID) -> {model}Public | HTTPValidationError | None: + """Async version of get().""" + from personal_crm_client.api.{module} import {get_func} + return await {get_func}.asyncio(client=self._client, {item_id}={item_id}) + + def create(self, item: {model}Create) -> {model}Public | HTTPValidationError | None: + """Create a new {singular}.""" + from personal_crm_client.api.{module} import {create_func} + return {create_func}.sync(client=self._client, json_body=item) + + async def create_async(self, item: {model}Create) -> {model}Public | HTTPValidationError | None: + """Async version of create().""" + from personal_crm_client.api.{module} import {create_func} + return await {create_func}.asyncio(client=self._client, json_body=item) + + def update(self, {item_id}: UUID, item: {model}Update) -> {model}Public | HTTPValidationError | None: + """Update an existing {singular}.""" + from personal_crm_client.api.{module} import {update_func} + return {update_func}.sync(client=self._client, {item_id}={item_id}, json_body=item) + + async def update_async(self, {item_id}: UUID, item: {model}Update) -> {model}Public | HTTPValidationError | None: + """Async version of update().""" + from personal_crm_client.api.{module} import {update_func} + return await {update_func}.asyncio(client=self._client, {item_id}={item_id}, json_body=item) + + def delete(self, {item_id}: UUID) -> {model}Public | HTTPValidationError | None: + """Delete a {singular}.""" + from personal_crm_client.api.{module} import {delete_func} + return {delete_func}.sync(client=self._client, {item_id}={item_id}) + + async def delete_async(self, {item_id}: UUID) -> {model}Public | HTTPValidationError | None: + """Async version of delete().""" + from personal_crm_client.api.{module} import {delete_func} + return await {delete_func}.asyncio(client=self._client, {item_id}={item_id}) diff --git a/kindred-sdk/kindred_sdk/resources/interactions.py b/kindred-sdk/kindred_sdk/resources/interactions.py new file mode 100644 index 00000000..687dafad --- /dev/null +++ b/kindred-sdk/kindred_sdk/resources/interactions.py @@ -0,0 +1,63 @@ +"""{resource_name} resource for Kindred SDK.""" + +from personal_crm_client import AuthenticatedClient, Client +from personal_crm_client.models import {model}Create, {model}Update, {models}, {model}Public +from personal_crm_client.models import HTTPValidationError +from uuid import UUID + + +class {class_name}: + """Resource for managing {module}.""" + + def __init__(self, client: AuthenticatedClient | Client): + self._client = client + + def list(self, *, skip: int = 0, limit: int = 100) -> {models} | HTTPValidationError | None: + """List {module}.""" + from personal_crm_client.api.{module} import {list_func} + return {list_func}.sync(client=self._client, skip=skip, limit=limit) + + async def list_async(self, *, skip: int = 0, limit: int = 100) -> {models} | HTTPValidationError | None: + """Async version of list().""" + from personal_crm_client.api.{module} import {list_func} + return await {list_func}.asyncio(client=self._client, skip=skip, limit=limit) + + def get(self, {item_id}: UUID) -> {model}Public | HTTPValidationError | None: + """Get a single {singular} by ID.""" + from personal_crm_client.api.{module} import {get_func} + return {get_func}.sync(client=self._client, {item_id}={item_id}) + + async def get_async(self, {item_id}: UUID) -> {model}Public | HTTPValidationError | None: + """Async version of get().""" + from personal_crm_client.api.{module} import {get_func} + return await {get_func}.asyncio(client=self._client, {item_id}={item_id}) + + def create(self, item: {model}Create) -> {model}Public | HTTPValidationError | None: + """Create a new {singular}.""" + from personal_crm_client.api.{module} import {create_func} + return {create_func}.sync(client=self._client, json_body=item) + + async def create_async(self, item: {model}Create) -> {model}Public | HTTPValidationError | None: + """Async version of create().""" + from personal_crm_client.api.{module} import {create_func} + return await {create_func}.asyncio(client=self._client, json_body=item) + + def update(self, {item_id}: UUID, item: {model}Update) -> {model}Public | HTTPValidationError | None: + """Update an existing {singular}.""" + from personal_crm_client.api.{module} import {update_func} + return {update_func}.sync(client=self._client, {item_id}={item_id}, json_body=item) + + async def update_async(self, {item_id}: UUID, item: {model}Update) -> {model}Public | HTTPValidationError | None: + """Async version of update().""" + from personal_crm_client.api.{module} import {update_func} + return await {update_func}.asyncio(client=self._client, {item_id}={item_id}, json_body=item) + + def delete(self, {item_id}: UUID) -> {model}Public | HTTPValidationError | None: + """Delete a {singular}.""" + from personal_crm_client.api.{module} import {delete_func} + return {delete_func}.sync(client=self._client, {item_id}={item_id}) + + async def delete_async(self, {item_id}: UUID) -> {model}Public | HTTPValidationError | None: + """Async version of delete().""" + from personal_crm_client.api.{module} import {delete_func} + return await {delete_func}.asyncio(client=self._client, {item_id}={item_id}) diff --git a/kindred-sdk/kindred_sdk/resources/journal.py b/kindred-sdk/kindred_sdk/resources/journal.py new file mode 100644 index 00000000..687dafad --- /dev/null +++ b/kindred-sdk/kindred_sdk/resources/journal.py @@ -0,0 +1,63 @@ +"""{resource_name} resource for Kindred SDK.""" + +from personal_crm_client import AuthenticatedClient, Client +from personal_crm_client.models import {model}Create, {model}Update, {models}, {model}Public +from personal_crm_client.models import HTTPValidationError +from uuid import UUID + + +class {class_name}: + """Resource for managing {module}.""" + + def __init__(self, client: AuthenticatedClient | Client): + self._client = client + + def list(self, *, skip: int = 0, limit: int = 100) -> {models} | HTTPValidationError | None: + """List {module}.""" + from personal_crm_client.api.{module} import {list_func} + return {list_func}.sync(client=self._client, skip=skip, limit=limit) + + async def list_async(self, *, skip: int = 0, limit: int = 100) -> {models} | HTTPValidationError | None: + """Async version of list().""" + from personal_crm_client.api.{module} import {list_func} + return await {list_func}.asyncio(client=self._client, skip=skip, limit=limit) + + def get(self, {item_id}: UUID) -> {model}Public | HTTPValidationError | None: + """Get a single {singular} by ID.""" + from personal_crm_client.api.{module} import {get_func} + return {get_func}.sync(client=self._client, {item_id}={item_id}) + + async def get_async(self, {item_id}: UUID) -> {model}Public | HTTPValidationError | None: + """Async version of get().""" + from personal_crm_client.api.{module} import {get_func} + return await {get_func}.asyncio(client=self._client, {item_id}={item_id}) + + def create(self, item: {model}Create) -> {model}Public | HTTPValidationError | None: + """Create a new {singular}.""" + from personal_crm_client.api.{module} import {create_func} + return {create_func}.sync(client=self._client, json_body=item) + + async def create_async(self, item: {model}Create) -> {model}Public | HTTPValidationError | None: + """Async version of create().""" + from personal_crm_client.api.{module} import {create_func} + return await {create_func}.asyncio(client=self._client, json_body=item) + + def update(self, {item_id}: UUID, item: {model}Update) -> {model}Public | HTTPValidationError | None: + """Update an existing {singular}.""" + from personal_crm_client.api.{module} import {update_func} + return {update_func}.sync(client=self._client, {item_id}={item_id}, json_body=item) + + async def update_async(self, {item_id}: UUID, item: {model}Update) -> {model}Public | HTTPValidationError | None: + """Async version of update().""" + from personal_crm_client.api.{module} import {update_func} + return await {update_func}.asyncio(client=self._client, {item_id}={item_id}, json_body=item) + + def delete(self, {item_id}: UUID) -> {model}Public | HTTPValidationError | None: + """Delete a {singular}.""" + from personal_crm_client.api.{module} import {delete_func} + return {delete_func}.sync(client=self._client, {item_id}={item_id}) + + async def delete_async(self, {item_id}: UUID) -> {model}Public | HTTPValidationError | None: + """Async version of delete().""" + from personal_crm_client.api.{module} import {delete_func} + return await {delete_func}.asyncio(client=self._client, {item_id}={item_id}) diff --git a/kindred-sdk/kindred_sdk/resources/life_events.py b/kindred-sdk/kindred_sdk/resources/life_events.py new file mode 100644 index 00000000..687dafad --- /dev/null +++ b/kindred-sdk/kindred_sdk/resources/life_events.py @@ -0,0 +1,63 @@ +"""{resource_name} resource for Kindred SDK.""" + +from personal_crm_client import AuthenticatedClient, Client +from personal_crm_client.models import {model}Create, {model}Update, {models}, {model}Public +from personal_crm_client.models import HTTPValidationError +from uuid import UUID + + +class {class_name}: + """Resource for managing {module}.""" + + def __init__(self, client: AuthenticatedClient | Client): + self._client = client + + def list(self, *, skip: int = 0, limit: int = 100) -> {models} | HTTPValidationError | None: + """List {module}.""" + from personal_crm_client.api.{module} import {list_func} + return {list_func}.sync(client=self._client, skip=skip, limit=limit) + + async def list_async(self, *, skip: int = 0, limit: int = 100) -> {models} | HTTPValidationError | None: + """Async version of list().""" + from personal_crm_client.api.{module} import {list_func} + return await {list_func}.asyncio(client=self._client, skip=skip, limit=limit) + + def get(self, {item_id}: UUID) -> {model}Public | HTTPValidationError | None: + """Get a single {singular} by ID.""" + from personal_crm_client.api.{module} import {get_func} + return {get_func}.sync(client=self._client, {item_id}={item_id}) + + async def get_async(self, {item_id}: UUID) -> {model}Public | HTTPValidationError | None: + """Async version of get().""" + from personal_crm_client.api.{module} import {get_func} + return await {get_func}.asyncio(client=self._client, {item_id}={item_id}) + + def create(self, item: {model}Create) -> {model}Public | HTTPValidationError | None: + """Create a new {singular}.""" + from personal_crm_client.api.{module} import {create_func} + return {create_func}.sync(client=self._client, json_body=item) + + async def create_async(self, item: {model}Create) -> {model}Public | HTTPValidationError | None: + """Async version of create().""" + from personal_crm_client.api.{module} import {create_func} + return await {create_func}.asyncio(client=self._client, json_body=item) + + def update(self, {item_id}: UUID, item: {model}Update) -> {model}Public | HTTPValidationError | None: + """Update an existing {singular}.""" + from personal_crm_client.api.{module} import {update_func} + return {update_func}.sync(client=self._client, {item_id}={item_id}, json_body=item) + + async def update_async(self, {item_id}: UUID, item: {model}Update) -> {model}Public | HTTPValidationError | None: + """Async version of update().""" + from personal_crm_client.api.{module} import {update_func} + return await {update_func}.asyncio(client=self._client, {item_id}={item_id}, json_body=item) + + def delete(self, {item_id}: UUID) -> {model}Public | HTTPValidationError | None: + """Delete a {singular}.""" + from personal_crm_client.api.{module} import {delete_func} + return {delete_func}.sync(client=self._client, {item_id}={item_id}) + + async def delete_async(self, {item_id}: UUID) -> {model}Public | HTTPValidationError | None: + """Async version of delete().""" + from personal_crm_client.api.{module} import {delete_func} + return await {delete_func}.asyncio(client=self._client, {item_id}={item_id}) diff --git a/kindred-sdk/kindred_sdk/resources/notes.py b/kindred-sdk/kindred_sdk/resources/notes.py new file mode 100644 index 00000000..687dafad --- /dev/null +++ b/kindred-sdk/kindred_sdk/resources/notes.py @@ -0,0 +1,63 @@ +"""{resource_name} resource for Kindred SDK.""" + +from personal_crm_client import AuthenticatedClient, Client +from personal_crm_client.models import {model}Create, {model}Update, {models}, {model}Public +from personal_crm_client.models import HTTPValidationError +from uuid import UUID + + +class {class_name}: + """Resource for managing {module}.""" + + def __init__(self, client: AuthenticatedClient | Client): + self._client = client + + def list(self, *, skip: int = 0, limit: int = 100) -> {models} | HTTPValidationError | None: + """List {module}.""" + from personal_crm_client.api.{module} import {list_func} + return {list_func}.sync(client=self._client, skip=skip, limit=limit) + + async def list_async(self, *, skip: int = 0, limit: int = 100) -> {models} | HTTPValidationError | None: + """Async version of list().""" + from personal_crm_client.api.{module} import {list_func} + return await {list_func}.asyncio(client=self._client, skip=skip, limit=limit) + + def get(self, {item_id}: UUID) -> {model}Public | HTTPValidationError | None: + """Get a single {singular} by ID.""" + from personal_crm_client.api.{module} import {get_func} + return {get_func}.sync(client=self._client, {item_id}={item_id}) + + async def get_async(self, {item_id}: UUID) -> {model}Public | HTTPValidationError | None: + """Async version of get().""" + from personal_crm_client.api.{module} import {get_func} + return await {get_func}.asyncio(client=self._client, {item_id}={item_id}) + + def create(self, item: {model}Create) -> {model}Public | HTTPValidationError | None: + """Create a new {singular}.""" + from personal_crm_client.api.{module} import {create_func} + return {create_func}.sync(client=self._client, json_body=item) + + async def create_async(self, item: {model}Create) -> {model}Public | HTTPValidationError | None: + """Async version of create().""" + from personal_crm_client.api.{module} import {create_func} + return await {create_func}.asyncio(client=self._client, json_body=item) + + def update(self, {item_id}: UUID, item: {model}Update) -> {model}Public | HTTPValidationError | None: + """Update an existing {singular}.""" + from personal_crm_client.api.{module} import {update_func} + return {update_func}.sync(client=self._client, {item_id}={item_id}, json_body=item) + + async def update_async(self, {item_id}: UUID, item: {model}Update) -> {model}Public | HTTPValidationError | None: + """Async version of update().""" + from personal_crm_client.api.{module} import {update_func} + return await {update_func}.asyncio(client=self._client, {item_id}={item_id}, json_body=item) + + def delete(self, {item_id}: UUID) -> {model}Public | HTTPValidationError | None: + """Delete a {singular}.""" + from personal_crm_client.api.{module} import {delete_func} + return {delete_func}.sync(client=self._client, {item_id}={item_id}) + + async def delete_async(self, {item_id}: UUID) -> {model}Public | HTTPValidationError | None: + """Async version of delete().""" + from personal_crm_client.api.{module} import {delete_func} + return await {delete_func}.asyncio(client=self._client, {item_id}={item_id}) diff --git a/kindred-sdk/kindred_sdk/resources/pets.py b/kindred-sdk/kindred_sdk/resources/pets.py new file mode 100644 index 00000000..687dafad --- /dev/null +++ b/kindred-sdk/kindred_sdk/resources/pets.py @@ -0,0 +1,63 @@ +"""{resource_name} resource for Kindred SDK.""" + +from personal_crm_client import AuthenticatedClient, Client +from personal_crm_client.models import {model}Create, {model}Update, {models}, {model}Public +from personal_crm_client.models import HTTPValidationError +from uuid import UUID + + +class {class_name}: + """Resource for managing {module}.""" + + def __init__(self, client: AuthenticatedClient | Client): + self._client = client + + def list(self, *, skip: int = 0, limit: int = 100) -> {models} | HTTPValidationError | None: + """List {module}.""" + from personal_crm_client.api.{module} import {list_func} + return {list_func}.sync(client=self._client, skip=skip, limit=limit) + + async def list_async(self, *, skip: int = 0, limit: int = 100) -> {models} | HTTPValidationError | None: + """Async version of list().""" + from personal_crm_client.api.{module} import {list_func} + return await {list_func}.asyncio(client=self._client, skip=skip, limit=limit) + + def get(self, {item_id}: UUID) -> {model}Public | HTTPValidationError | None: + """Get a single {singular} by ID.""" + from personal_crm_client.api.{module} import {get_func} + return {get_func}.sync(client=self._client, {item_id}={item_id}) + + async def get_async(self, {item_id}: UUID) -> {model}Public | HTTPValidationError | None: + """Async version of get().""" + from personal_crm_client.api.{module} import {get_func} + return await {get_func}.asyncio(client=self._client, {item_id}={item_id}) + + def create(self, item: {model}Create) -> {model}Public | HTTPValidationError | None: + """Create a new {singular}.""" + from personal_crm_client.api.{module} import {create_func} + return {create_func}.sync(client=self._client, json_body=item) + + async def create_async(self, item: {model}Create) -> {model}Public | HTTPValidationError | None: + """Async version of create().""" + from personal_crm_client.api.{module} import {create_func} + return await {create_func}.asyncio(client=self._client, json_body=item) + + def update(self, {item_id}: UUID, item: {model}Update) -> {model}Public | HTTPValidationError | None: + """Update an existing {singular}.""" + from personal_crm_client.api.{module} import {update_func} + return {update_func}.sync(client=self._client, {item_id}={item_id}, json_body=item) + + async def update_async(self, {item_id}: UUID, item: {model}Update) -> {model}Public | HTTPValidationError | None: + """Async version of update().""" + from personal_crm_client.api.{module} import {update_func} + return await {update_func}.asyncio(client=self._client, {item_id}={item_id}, json_body=item) + + def delete(self, {item_id}: UUID) -> {model}Public | HTTPValidationError | None: + """Delete a {singular}.""" + from personal_crm_client.api.{module} import {delete_func} + return {delete_func}.sync(client=self._client, {item_id}={item_id}) + + async def delete_async(self, {item_id}: UUID) -> {model}Public | HTTPValidationError | None: + """Async version of delete().""" + from personal_crm_client.api.{module} import {delete_func} + return await {delete_func}.asyncio(client=self._client, {item_id}={item_id}) diff --git a/kindred-sdk/kindred_sdk/resources/relationships.py b/kindred-sdk/kindred_sdk/resources/relationships.py new file mode 100644 index 00000000..687dafad --- /dev/null +++ b/kindred-sdk/kindred_sdk/resources/relationships.py @@ -0,0 +1,63 @@ +"""{resource_name} resource for Kindred SDK.""" + +from personal_crm_client import AuthenticatedClient, Client +from personal_crm_client.models import {model}Create, {model}Update, {models}, {model}Public +from personal_crm_client.models import HTTPValidationError +from uuid import UUID + + +class {class_name}: + """Resource for managing {module}.""" + + def __init__(self, client: AuthenticatedClient | Client): + self._client = client + + def list(self, *, skip: int = 0, limit: int = 100) -> {models} | HTTPValidationError | None: + """List {module}.""" + from personal_crm_client.api.{module} import {list_func} + return {list_func}.sync(client=self._client, skip=skip, limit=limit) + + async def list_async(self, *, skip: int = 0, limit: int = 100) -> {models} | HTTPValidationError | None: + """Async version of list().""" + from personal_crm_client.api.{module} import {list_func} + return await {list_func}.asyncio(client=self._client, skip=skip, limit=limit) + + def get(self, {item_id}: UUID) -> {model}Public | HTTPValidationError | None: + """Get a single {singular} by ID.""" + from personal_crm_client.api.{module} import {get_func} + return {get_func}.sync(client=self._client, {item_id}={item_id}) + + async def get_async(self, {item_id}: UUID) -> {model}Public | HTTPValidationError | None: + """Async version of get().""" + from personal_crm_client.api.{module} import {get_func} + return await {get_func}.asyncio(client=self._client, {item_id}={item_id}) + + def create(self, item: {model}Create) -> {model}Public | HTTPValidationError | None: + """Create a new {singular}.""" + from personal_crm_client.api.{module} import {create_func} + return {create_func}.sync(client=self._client, json_body=item) + + async def create_async(self, item: {model}Create) -> {model}Public | HTTPValidationError | None: + """Async version of create().""" + from personal_crm_client.api.{module} import {create_func} + return await {create_func}.asyncio(client=self._client, json_body=item) + + def update(self, {item_id}: UUID, item: {model}Update) -> {model}Public | HTTPValidationError | None: + """Update an existing {singular}.""" + from personal_crm_client.api.{module} import {update_func} + return {update_func}.sync(client=self._client, {item_id}={item_id}, json_body=item) + + async def update_async(self, {item_id}: UUID, item: {model}Update) -> {model}Public | HTTPValidationError | None: + """Async version of update().""" + from personal_crm_client.api.{module} import {update_func} + return await {update_func}.asyncio(client=self._client, {item_id}={item_id}, json_body=item) + + def delete(self, {item_id}: UUID) -> {model}Public | HTTPValidationError | None: + """Delete a {singular}.""" + from personal_crm_client.api.{module} import {delete_func} + return {delete_func}.sync(client=self._client, {item_id}={item_id}) + + async def delete_async(self, {item_id}: UUID) -> {model}Public | HTTPValidationError | None: + """Async version of delete().""" + from personal_crm_client.api.{module} import {delete_func} + return await {delete_func}.asyncio(client=self._client, {item_id}={item_id}) diff --git a/kindred-sdk/kindred_sdk/resources/reminders.py b/kindred-sdk/kindred_sdk/resources/reminders.py new file mode 100644 index 00000000..687dafad --- /dev/null +++ b/kindred-sdk/kindred_sdk/resources/reminders.py @@ -0,0 +1,63 @@ +"""{resource_name} resource for Kindred SDK.""" + +from personal_crm_client import AuthenticatedClient, Client +from personal_crm_client.models import {model}Create, {model}Update, {models}, {model}Public +from personal_crm_client.models import HTTPValidationError +from uuid import UUID + + +class {class_name}: + """Resource for managing {module}.""" + + def __init__(self, client: AuthenticatedClient | Client): + self._client = client + + def list(self, *, skip: int = 0, limit: int = 100) -> {models} | HTTPValidationError | None: + """List {module}.""" + from personal_crm_client.api.{module} import {list_func} + return {list_func}.sync(client=self._client, skip=skip, limit=limit) + + async def list_async(self, *, skip: int = 0, limit: int = 100) -> {models} | HTTPValidationError | None: + """Async version of list().""" + from personal_crm_client.api.{module} import {list_func} + return await {list_func}.asyncio(client=self._client, skip=skip, limit=limit) + + def get(self, {item_id}: UUID) -> {model}Public | HTTPValidationError | None: + """Get a single {singular} by ID.""" + from personal_crm_client.api.{module} import {get_func} + return {get_func}.sync(client=self._client, {item_id}={item_id}) + + async def get_async(self, {item_id}: UUID) -> {model}Public | HTTPValidationError | None: + """Async version of get().""" + from personal_crm_client.api.{module} import {get_func} + return await {get_func}.asyncio(client=self._client, {item_id}={item_id}) + + def create(self, item: {model}Create) -> {model}Public | HTTPValidationError | None: + """Create a new {singular}.""" + from personal_crm_client.api.{module} import {create_func} + return {create_func}.sync(client=self._client, json_body=item) + + async def create_async(self, item: {model}Create) -> {model}Public | HTTPValidationError | None: + """Async version of create().""" + from personal_crm_client.api.{module} import {create_func} + return await {create_func}.asyncio(client=self._client, json_body=item) + + def update(self, {item_id}: UUID, item: {model}Update) -> {model}Public | HTTPValidationError | None: + """Update an existing {singular}.""" + from personal_crm_client.api.{module} import {update_func} + return {update_func}.sync(client=self._client, {item_id}={item_id}, json_body=item) + + async def update_async(self, {item_id}: UUID, item: {model}Update) -> {model}Public | HTTPValidationError | None: + """Async version of update().""" + from personal_crm_client.api.{module} import {update_func} + return await {update_func}.asyncio(client=self._client, {item_id}={item_id}, json_body=item) + + def delete(self, {item_id}: UUID) -> {model}Public | HTTPValidationError | None: + """Delete a {singular}.""" + from personal_crm_client.api.{module} import {delete_func} + return {delete_func}.sync(client=self._client, {item_id}={item_id}) + + async def delete_async(self, {item_id}: UUID) -> {model}Public | HTTPValidationError | None: + """Async version of delete().""" + from personal_crm_client.api.{module} import {delete_func} + return await {delete_func}.asyncio(client=self._client, {item_id}={item_id}) diff --git a/kindred-sdk/kindred_sdk/resources/tags.py b/kindred-sdk/kindred_sdk/resources/tags.py new file mode 100644 index 00000000..687dafad --- /dev/null +++ b/kindred-sdk/kindred_sdk/resources/tags.py @@ -0,0 +1,63 @@ +"""{resource_name} resource for Kindred SDK.""" + +from personal_crm_client import AuthenticatedClient, Client +from personal_crm_client.models import {model}Create, {model}Update, {models}, {model}Public +from personal_crm_client.models import HTTPValidationError +from uuid import UUID + + +class {class_name}: + """Resource for managing {module}.""" + + def __init__(self, client: AuthenticatedClient | Client): + self._client = client + + def list(self, *, skip: int = 0, limit: int = 100) -> {models} | HTTPValidationError | None: + """List {module}.""" + from personal_crm_client.api.{module} import {list_func} + return {list_func}.sync(client=self._client, skip=skip, limit=limit) + + async def list_async(self, *, skip: int = 0, limit: int = 100) -> {models} | HTTPValidationError | None: + """Async version of list().""" + from personal_crm_client.api.{module} import {list_func} + return await {list_func}.asyncio(client=self._client, skip=skip, limit=limit) + + def get(self, {item_id}: UUID) -> {model}Public | HTTPValidationError | None: + """Get a single {singular} by ID.""" + from personal_crm_client.api.{module} import {get_func} + return {get_func}.sync(client=self._client, {item_id}={item_id}) + + async def get_async(self, {item_id}: UUID) -> {model}Public | HTTPValidationError | None: + """Async version of get().""" + from personal_crm_client.api.{module} import {get_func} + return await {get_func}.asyncio(client=self._client, {item_id}={item_id}) + + def create(self, item: {model}Create) -> {model}Public | HTTPValidationError | None: + """Create a new {singular}.""" + from personal_crm_client.api.{module} import {create_func} + return {create_func}.sync(client=self._client, json_body=item) + + async def create_async(self, item: {model}Create) -> {model}Public | HTTPValidationError | None: + """Async version of create().""" + from personal_crm_client.api.{module} import {create_func} + return await {create_func}.asyncio(client=self._client, json_body=item) + + def update(self, {item_id}: UUID, item: {model}Update) -> {model}Public | HTTPValidationError | None: + """Update an existing {singular}.""" + from personal_crm_client.api.{module} import {update_func} + return {update_func}.sync(client=self._client, {item_id}={item_id}, json_body=item) + + async def update_async(self, {item_id}: UUID, item: {model}Update) -> {model}Public | HTTPValidationError | None: + """Async version of update().""" + from personal_crm_client.api.{module} import {update_func} + return await {update_func}.asyncio(client=self._client, {item_id}={item_id}, json_body=item) + + def delete(self, {item_id}: UUID) -> {model}Public | HTTPValidationError | None: + """Delete a {singular}.""" + from personal_crm_client.api.{module} import {delete_func} + return {delete_func}.sync(client=self._client, {item_id}={item_id}) + + async def delete_async(self, {item_id}: UUID) -> {model}Public | HTTPValidationError | None: + """Async version of delete().""" + from personal_crm_client.api.{module} import {delete_func} + return await {delete_func}.asyncio(client=self._client, {item_id}={item_id}) diff --git a/kindred-sdk/personal_crm_client/__init__.py b/kindred-sdk/personal_crm_client/__init__.py new file mode 100644 index 00000000..3102f44f --- /dev/null +++ b/kindred-sdk/personal_crm_client/__init__.py @@ -0,0 +1,8 @@ + +""" A client library for accessing Personal CRM """ +from .client import AuthenticatedClient, Client + +__all__ = ( + "AuthenticatedClient", + "Client", +) diff --git a/kindred-sdk/personal_crm_client/api/__init__.py b/kindred-sdk/personal_crm_client/api/__init__.py new file mode 100644 index 00000000..dc035f4c --- /dev/null +++ b/kindred-sdk/personal_crm_client/api/__init__.py @@ -0,0 +1 @@ +""" Contains methods for accessing the API """ diff --git a/kindred-sdk/personal_crm_client/api/activity_logs/__init__.py b/kindred-sdk/personal_crm_client/api/activity_logs/__init__.py new file mode 100644 index 00000000..c9921b5f --- /dev/null +++ b/kindred-sdk/personal_crm_client/api/activity_logs/__init__.py @@ -0,0 +1 @@ +""" Contains endpoint functions for accessing the API """ diff --git a/kindred-sdk/personal_crm_client/api/activity_logs/activity_logs_list_activity_logs.py b/kindred-sdk/personal_crm_client/api/activity_logs/activity_logs_list_activity_logs.py new file mode 100644 index 00000000..e13ce55e --- /dev/null +++ b/kindred-sdk/personal_crm_client/api/activity_logs/activity_logs_list_activity_logs.py @@ -0,0 +1,288 @@ +from http import HTTPStatus +from typing import Any, cast +from urllib.parse import quote + +import httpx + +from ...client import AuthenticatedClient, Client +from ...types import Response, UNSET +from ... import errors + +from ...models.activity_logs_public import ActivityLogsPublic +from ...models.http_validation_error import HTTPValidationError +from ...types import UNSET, Unset +from typing import cast +from uuid import UUID + + + +def _get_kwargs( + *, + entity_type: None | str | Unset = UNSET, + entity_id: None | Unset | UUID = UNSET, + tag_id: None | Unset | UUID = UNSET, + limit: int | Unset = 50, + offset: int | Unset = 0, + +) -> dict[str, Any]: + + + + + params: dict[str, Any] = {} + + json_entity_type: None | str | Unset + if isinstance(entity_type, Unset): + json_entity_type = UNSET + else: + json_entity_type = entity_type + params["entity_type"] = json_entity_type + + json_entity_id: None | str | Unset + if isinstance(entity_id, Unset): + json_entity_id = UNSET + elif isinstance(entity_id, UUID): + json_entity_id = str(entity_id) + else: + json_entity_id = entity_id + params["entity_id"] = json_entity_id + + json_tag_id: None | str | Unset + if isinstance(tag_id, Unset): + json_tag_id = UNSET + elif isinstance(tag_id, UUID): + json_tag_id = str(tag_id) + else: + json_tag_id = tag_id + params["tag_id"] = json_tag_id + + params["limit"] = limit + + params["offset"] = offset + + + params = {k: v for k, v in params.items() if v is not UNSET and v is not None} + + + _kwargs: dict[str, Any] = { + "method": "get", + "url": "/api/v1/activity-logs/", + "params": params, + } + + + return _kwargs + + + +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> ActivityLogsPublic | HTTPValidationError | None: + if response.status_code == 200: + response_200 = ActivityLogsPublic.from_dict(response.json()) + + + + return response_200 + + if response.status_code == 422: + response_422 = HTTPValidationError.from_dict(response.json()) + + + + return response_422 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[ActivityLogsPublic | HTTPValidationError]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + *, + client: AuthenticatedClient, + entity_type: None | str | Unset = UNSET, + entity_id: None | Unset | UUID = UNSET, + tag_id: None | Unset | UUID = UNSET, + limit: int | Unset = 50, + offset: int | Unset = 0, + +) -> Response[ActivityLogsPublic | HTTPValidationError]: + """ List Activity Logs + + Return activity log entries for entities visible to the current user. + + Owned logs (any entity type) are always included. Contact-entity logs are + also included when the contact is visible via a TagShare grant. + + Args: + entity_type (None | str | Unset): + entity_id (None | Unset | UUID): + tag_id (None | Unset | UUID): + limit (int | Unset): Default: 50. + offset (int | Unset): Default: 0. + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[ActivityLogsPublic | HTTPValidationError] + """ + + + kwargs = _get_kwargs( + entity_type=entity_type, +entity_id=entity_id, +tag_id=tag_id, +limit=limit, +offset=offset, + + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + +def sync( + *, + client: AuthenticatedClient, + entity_type: None | str | Unset = UNSET, + entity_id: None | Unset | UUID = UNSET, + tag_id: None | Unset | UUID = UNSET, + limit: int | Unset = 50, + offset: int | Unset = 0, + +) -> ActivityLogsPublic | HTTPValidationError | None: + """ List Activity Logs + + Return activity log entries for entities visible to the current user. + + Owned logs (any entity type) are always included. Contact-entity logs are + also included when the contact is visible via a TagShare grant. + + Args: + entity_type (None | str | Unset): + entity_id (None | Unset | UUID): + tag_id (None | Unset | UUID): + limit (int | Unset): Default: 50. + offset (int | Unset): Default: 0. + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + ActivityLogsPublic | HTTPValidationError + """ + + + return sync_detailed( + client=client, +entity_type=entity_type, +entity_id=entity_id, +tag_id=tag_id, +limit=limit, +offset=offset, + + ).parsed + +async def asyncio_detailed( + *, + client: AuthenticatedClient, + entity_type: None | str | Unset = UNSET, + entity_id: None | Unset | UUID = UNSET, + tag_id: None | Unset | UUID = UNSET, + limit: int | Unset = 50, + offset: int | Unset = 0, + +) -> Response[ActivityLogsPublic | HTTPValidationError]: + """ List Activity Logs + + Return activity log entries for entities visible to the current user. + + Owned logs (any entity type) are always included. Contact-entity logs are + also included when the contact is visible via a TagShare grant. + + Args: + entity_type (None | str | Unset): + entity_id (None | Unset | UUID): + tag_id (None | Unset | UUID): + limit (int | Unset): Default: 50. + offset (int | Unset): Default: 0. + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[ActivityLogsPublic | HTTPValidationError] + """ + + + kwargs = _get_kwargs( + entity_type=entity_type, +entity_id=entity_id, +tag_id=tag_id, +limit=limit, +offset=offset, + + ) + + response = await client.get_async_httpx_client().request( + **kwargs + ) + + return _build_response(client=client, response=response) + +async def asyncio( + *, + client: AuthenticatedClient, + entity_type: None | str | Unset = UNSET, + entity_id: None | Unset | UUID = UNSET, + tag_id: None | Unset | UUID = UNSET, + limit: int | Unset = 50, + offset: int | Unset = 0, + +) -> ActivityLogsPublic | HTTPValidationError | None: + """ List Activity Logs + + Return activity log entries for entities visible to the current user. + + Owned logs (any entity type) are always included. Contact-entity logs are + also included when the contact is visible via a TagShare grant. + + Args: + entity_type (None | str | Unset): + entity_id (None | Unset | UUID): + tag_id (None | Unset | UUID): + limit (int | Unset): Default: 50. + offset (int | Unset): Default: 0. + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + ActivityLogsPublic | HTTPValidationError + """ + + + return (await asyncio_detailed( + client=client, +entity_type=entity_type, +entity_id=entity_id, +tag_id=tag_id, +limit=limit, +offset=offset, + + )).parsed diff --git a/kindred-sdk/personal_crm_client/api/addresses/__init__.py b/kindred-sdk/personal_crm_client/api/addresses/__init__.py new file mode 100644 index 00000000..c9921b5f --- /dev/null +++ b/kindred-sdk/personal_crm_client/api/addresses/__init__.py @@ -0,0 +1 @@ +""" Contains endpoint functions for accessing the API """ diff --git a/kindred-sdk/personal_crm_client/api/addresses/addresses_create_address_route.py b/kindred-sdk/personal_crm_client/api/addresses/addresses_create_address_route.py new file mode 100644 index 00000000..cc911b32 --- /dev/null +++ b/kindred-sdk/personal_crm_client/api/addresses/addresses_create_address_route.py @@ -0,0 +1,195 @@ +from http import HTTPStatus +from typing import Any, cast +from urllib.parse import quote + +import httpx + +from ...client import AuthenticatedClient, Client +from ...types import Response, UNSET +from ... import errors + +from ...models.address_create import AddressCreate +from ...models.address_public import AddressPublic +from ...models.http_validation_error import HTTPValidationError +from typing import cast + + + +def _get_kwargs( + *, + body: AddressCreate, + +) -> dict[str, Any]: + headers: dict[str, Any] = {} + + + + + + + _kwargs: dict[str, Any] = { + "method": "post", + "url": "/api/v1/addresses/", + } + + _kwargs["json"] = body.to_dict() + + + headers["Content-Type"] = "application/json" + + _kwargs["headers"] = headers + return _kwargs + + + +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> AddressPublic | HTTPValidationError | None: + if response.status_code == 200: + response_200 = AddressPublic.from_dict(response.json()) + + + + return response_200 + + if response.status_code == 422: + response_422 = HTTPValidationError.from_dict(response.json()) + + + + return response_422 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[AddressPublic | HTTPValidationError]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + *, + client: AuthenticatedClient, + body: AddressCreate, + +) -> Response[AddressPublic | HTTPValidationError]: + """ Create Address Route + + Create a new address. + + Args: + body (AddressCreate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[AddressPublic | HTTPValidationError] + """ + + + kwargs = _get_kwargs( + body=body, + + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + +def sync( + *, + client: AuthenticatedClient, + body: AddressCreate, + +) -> AddressPublic | HTTPValidationError | None: + """ Create Address Route + + Create a new address. + + Args: + body (AddressCreate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + AddressPublic | HTTPValidationError + """ + + + return sync_detailed( + client=client, +body=body, + + ).parsed + +async def asyncio_detailed( + *, + client: AuthenticatedClient, + body: AddressCreate, + +) -> Response[AddressPublic | HTTPValidationError]: + """ Create Address Route + + Create a new address. + + Args: + body (AddressCreate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[AddressPublic | HTTPValidationError] + """ + + + kwargs = _get_kwargs( + body=body, + + ) + + response = await client.get_async_httpx_client().request( + **kwargs + ) + + return _build_response(client=client, response=response) + +async def asyncio( + *, + client: AuthenticatedClient, + body: AddressCreate, + +) -> AddressPublic | HTTPValidationError | None: + """ Create Address Route + + Create a new address. + + Args: + body (AddressCreate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + AddressPublic | HTTPValidationError + """ + + + return (await asyncio_detailed( + client=client, +body=body, + + )).parsed diff --git a/kindred-sdk/personal_crm_client/api/addresses/addresses_delete_address.py b/kindred-sdk/personal_crm_client/api/addresses/addresses_delete_address.py new file mode 100644 index 00000000..ed13cae7 --- /dev/null +++ b/kindred-sdk/personal_crm_client/api/addresses/addresses_delete_address.py @@ -0,0 +1,184 @@ +from http import HTTPStatus +from typing import Any, cast +from urllib.parse import quote + +import httpx + +from ...client import AuthenticatedClient, Client +from ...types import Response, UNSET +from ... import errors + +from ...models.http_validation_error import HTTPValidationError +from typing import cast +from uuid import UUID + + + +def _get_kwargs( + address_id: UUID, + +) -> dict[str, Any]: + + + + + + + _kwargs: dict[str, Any] = { + "method": "delete", + "url": "/api/v1/addresses/{address_id}".format(address_id=quote(str(address_id), safe=""),), + } + + + return _kwargs + + + +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Any | HTTPValidationError | None: + if response.status_code == 200: + response_200 = response.json() + return response_200 + + if response.status_code == 422: + response_422 = HTTPValidationError.from_dict(response.json()) + + + + return response_422 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[Any | HTTPValidationError]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + address_id: UUID, + *, + client: AuthenticatedClient, + +) -> Response[Any | HTTPValidationError]: + """ Delete Address + + Delete an address. + + Args: + address_id (UUID): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Any | HTTPValidationError] + """ + + + kwargs = _get_kwargs( + address_id=address_id, + + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + +def sync( + address_id: UUID, + *, + client: AuthenticatedClient, + +) -> Any | HTTPValidationError | None: + """ Delete Address + + Delete an address. + + Args: + address_id (UUID): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Any | HTTPValidationError + """ + + + return sync_detailed( + address_id=address_id, +client=client, + + ).parsed + +async def asyncio_detailed( + address_id: UUID, + *, + client: AuthenticatedClient, + +) -> Response[Any | HTTPValidationError]: + """ Delete Address + + Delete an address. + + Args: + address_id (UUID): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Any | HTTPValidationError] + """ + + + kwargs = _get_kwargs( + address_id=address_id, + + ) + + response = await client.get_async_httpx_client().request( + **kwargs + ) + + return _build_response(client=client, response=response) + +async def asyncio( + address_id: UUID, + *, + client: AuthenticatedClient, + +) -> Any | HTTPValidationError | None: + """ Delete Address + + Delete an address. + + Args: + address_id (UUID): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Any | HTTPValidationError + """ + + + return (await asyncio_detailed( + address_id=address_id, +client=client, + + )).parsed diff --git a/kindred-sdk/personal_crm_client/api/addresses/addresses_list_addresses.py b/kindred-sdk/personal_crm_client/api/addresses/addresses_list_addresses.py new file mode 100644 index 00000000..d7535e35 --- /dev/null +++ b/kindred-sdk/personal_crm_client/api/addresses/addresses_list_addresses.py @@ -0,0 +1,184 @@ +from http import HTTPStatus +from typing import Any, cast +from urllib.parse import quote + +import httpx + +from ...client import AuthenticatedClient, Client +from ...types import Response, UNSET +from ... import errors + +from ...models.http_validation_error import HTTPValidationError +from typing import cast +from uuid import UUID + + + +def _get_kwargs( + contact_id: UUID, + +) -> dict[str, Any]: + + + + + + + _kwargs: dict[str, Any] = { + "method": "get", + "url": "/api/v1/addresses/contact/{contact_id}".format(contact_id=quote(str(contact_id), safe=""),), + } + + + return _kwargs + + + +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Any | HTTPValidationError | None: + if response.status_code == 200: + response_200 = response.json() + return response_200 + + if response.status_code == 422: + response_422 = HTTPValidationError.from_dict(response.json()) + + + + return response_422 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[Any | HTTPValidationError]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + contact_id: UUID, + *, + client: AuthenticatedClient, + +) -> Response[Any | HTTPValidationError]: + """ List Addresses + + List all addresses for a contact. + + Args: + contact_id (UUID): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Any | HTTPValidationError] + """ + + + kwargs = _get_kwargs( + contact_id=contact_id, + + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + +def sync( + contact_id: UUID, + *, + client: AuthenticatedClient, + +) -> Any | HTTPValidationError | None: + """ List Addresses + + List all addresses for a contact. + + Args: + contact_id (UUID): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Any | HTTPValidationError + """ + + + return sync_detailed( + contact_id=contact_id, +client=client, + + ).parsed + +async def asyncio_detailed( + contact_id: UUID, + *, + client: AuthenticatedClient, + +) -> Response[Any | HTTPValidationError]: + """ List Addresses + + List all addresses for a contact. + + Args: + contact_id (UUID): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Any | HTTPValidationError] + """ + + + kwargs = _get_kwargs( + contact_id=contact_id, + + ) + + response = await client.get_async_httpx_client().request( + **kwargs + ) + + return _build_response(client=client, response=response) + +async def asyncio( + contact_id: UUID, + *, + client: AuthenticatedClient, + +) -> Any | HTTPValidationError | None: + """ List Addresses + + List all addresses for a contact. + + Args: + contact_id (UUID): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Any | HTTPValidationError + """ + + + return (await asyncio_detailed( + contact_id=contact_id, +client=client, + + )).parsed diff --git a/kindred-sdk/personal_crm_client/api/addresses/addresses_update_address.py b/kindred-sdk/personal_crm_client/api/addresses/addresses_update_address.py new file mode 100644 index 00000000..4bf69a45 --- /dev/null +++ b/kindred-sdk/personal_crm_client/api/addresses/addresses_update_address.py @@ -0,0 +1,209 @@ +from http import HTTPStatus +from typing import Any, cast +from urllib.parse import quote + +import httpx + +from ...client import AuthenticatedClient, Client +from ...types import Response, UNSET +from ... import errors + +from ...models.address_public import AddressPublic +from ...models.address_update import AddressUpdate +from ...models.http_validation_error import HTTPValidationError +from typing import cast +from uuid import UUID + + + +def _get_kwargs( + address_id: UUID, + *, + body: AddressUpdate, + +) -> dict[str, Any]: + headers: dict[str, Any] = {} + + + + + + + _kwargs: dict[str, Any] = { + "method": "patch", + "url": "/api/v1/addresses/{address_id}".format(address_id=quote(str(address_id), safe=""),), + } + + _kwargs["json"] = body.to_dict() + + + headers["Content-Type"] = "application/json" + + _kwargs["headers"] = headers + return _kwargs + + + +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> AddressPublic | HTTPValidationError | None: + if response.status_code == 200: + response_200 = AddressPublic.from_dict(response.json()) + + + + return response_200 + + if response.status_code == 422: + response_422 = HTTPValidationError.from_dict(response.json()) + + + + return response_422 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[AddressPublic | HTTPValidationError]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + address_id: UUID, + *, + client: AuthenticatedClient, + body: AddressUpdate, + +) -> Response[AddressPublic | HTTPValidationError]: + """ Update Address + + Update an address. + + Args: + address_id (UUID): + body (AddressUpdate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[AddressPublic | HTTPValidationError] + """ + + + kwargs = _get_kwargs( + address_id=address_id, +body=body, + + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + +def sync( + address_id: UUID, + *, + client: AuthenticatedClient, + body: AddressUpdate, + +) -> AddressPublic | HTTPValidationError | None: + """ Update Address + + Update an address. + + Args: + address_id (UUID): + body (AddressUpdate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + AddressPublic | HTTPValidationError + """ + + + return sync_detailed( + address_id=address_id, +client=client, +body=body, + + ).parsed + +async def asyncio_detailed( + address_id: UUID, + *, + client: AuthenticatedClient, + body: AddressUpdate, + +) -> Response[AddressPublic | HTTPValidationError]: + """ Update Address + + Update an address. + + Args: + address_id (UUID): + body (AddressUpdate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[AddressPublic | HTTPValidationError] + """ + + + kwargs = _get_kwargs( + address_id=address_id, +body=body, + + ) + + response = await client.get_async_httpx_client().request( + **kwargs + ) + + return _build_response(client=client, response=response) + +async def asyncio( + address_id: UUID, + *, + client: AuthenticatedClient, + body: AddressUpdate, + +) -> AddressPublic | HTTPValidationError | None: + """ Update Address + + Update an address. + + Args: + address_id (UUID): + body (AddressUpdate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + AddressPublic | HTTPValidationError + """ + + + return (await asyncio_detailed( + address_id=address_id, +client=client, +body=body, + + )).parsed diff --git a/kindred-sdk/personal_crm_client/api/calendar/__init__.py b/kindred-sdk/personal_crm_client/api/calendar/__init__.py new file mode 100644 index 00000000..c9921b5f --- /dev/null +++ b/kindred-sdk/personal_crm_client/api/calendar/__init__.py @@ -0,0 +1 @@ +""" Contains endpoint functions for accessing the API """ diff --git a/kindred-sdk/personal_crm_client/api/calendar/calendar_get_calendar_month.py b/kindred-sdk/personal_crm_client/api/calendar/calendar_get_calendar_month.py new file mode 100644 index 00000000..151fb2e2 --- /dev/null +++ b/kindred-sdk/personal_crm_client/api/calendar/calendar_get_calendar_month.py @@ -0,0 +1,179 @@ +from http import HTTPStatus +from typing import Any, cast +from urllib.parse import quote + +import httpx + +from ...client import AuthenticatedClient, Client +from ...types import Response, UNSET +from ... import errors + +from ...models.calendar_month_response import CalendarMonthResponse +from ...models.http_validation_error import HTTPValidationError +from typing import cast + + + +def _get_kwargs( + yyyy_mm: str, + +) -> dict[str, Any]: + + + + + + + _kwargs: dict[str, Any] = { + "method": "get", + "url": "/api/v1/calendar/month/{yyyy_mm}".format(yyyy_mm=quote(str(yyyy_mm), safe=""),), + } + + + return _kwargs + + + +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> CalendarMonthResponse | HTTPValidationError | None: + if response.status_code == 200: + response_200 = CalendarMonthResponse.from_dict(response.json()) + + + + return response_200 + + if response.status_code == 422: + response_422 = HTTPValidationError.from_dict(response.json()) + + + + return response_422 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[CalendarMonthResponse | HTTPValidationError]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + yyyy_mm: str, + *, + client: AuthenticatedClient, + +) -> Response[CalendarMonthResponse | HTTPValidationError]: + """ Get Calendar Month + + Args: + yyyy_mm (str): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[CalendarMonthResponse | HTTPValidationError] + """ + + + kwargs = _get_kwargs( + yyyy_mm=yyyy_mm, + + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + +def sync( + yyyy_mm: str, + *, + client: AuthenticatedClient, + +) -> CalendarMonthResponse | HTTPValidationError | None: + """ Get Calendar Month + + Args: + yyyy_mm (str): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + CalendarMonthResponse | HTTPValidationError + """ + + + return sync_detailed( + yyyy_mm=yyyy_mm, +client=client, + + ).parsed + +async def asyncio_detailed( + yyyy_mm: str, + *, + client: AuthenticatedClient, + +) -> Response[CalendarMonthResponse | HTTPValidationError]: + """ Get Calendar Month + + Args: + yyyy_mm (str): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[CalendarMonthResponse | HTTPValidationError] + """ + + + kwargs = _get_kwargs( + yyyy_mm=yyyy_mm, + + ) + + response = await client.get_async_httpx_client().request( + **kwargs + ) + + return _build_response(client=client, response=response) + +async def asyncio( + yyyy_mm: str, + *, + client: AuthenticatedClient, + +) -> CalendarMonthResponse | HTTPValidationError | None: + """ Get Calendar Month + + Args: + yyyy_mm (str): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + CalendarMonthResponse | HTTPValidationError + """ + + + return (await asyncio_detailed( + yyyy_mm=yyyy_mm, +client=client, + + )).parsed diff --git a/kindred-sdk/personal_crm_client/api/carddav/__init__.py b/kindred-sdk/personal_crm_client/api/carddav/__init__.py new file mode 100644 index 00000000..c9921b5f --- /dev/null +++ b/kindred-sdk/personal_crm_client/api/carddav/__init__.py @@ -0,0 +1 @@ +""" Contains endpoint functions for accessing the API """ diff --git a/kindred-sdk/personal_crm_client/api/carddav/carddav_well_known_carddav.py b/kindred-sdk/personal_crm_client/api/carddav/carddav_well_known_carddav.py new file mode 100644 index 00000000..401ccf16 --- /dev/null +++ b/kindred-sdk/personal_crm_client/api/carddav/carddav_well_known_carddav.py @@ -0,0 +1,108 @@ +from http import HTTPStatus +from typing import Any, cast +from urllib.parse import quote + +import httpx + +from ...client import AuthenticatedClient, Client +from ...types import Response, UNSET +from ... import errors + + + + +def _get_kwargs( + +) -> dict[str, Any]: + + + + + + + _kwargs: dict[str, Any] = { + "method": "get", + "url": "/.well-known/carddav", + } + + + return _kwargs + + + +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Any | None: + if response.status_code == 200: + return None + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[Any]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + *, + client: AuthenticatedClient | Client, + +) -> Response[Any]: + """ Well Known Carddav + + Redirect to CardDAV server for iOS/macOS client discovery. + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Any] + """ + + + kwargs = _get_kwargs( + + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + + +async def asyncio_detailed( + *, + client: AuthenticatedClient | Client, + +) -> Response[Any]: + """ Well Known Carddav + + Redirect to CardDAV server for iOS/macOS client discovery. + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Any] + """ + + + kwargs = _get_kwargs( + + ) + + response = await client.get_async_httpx_client().request( + **kwargs + ) + + return _build_response(client=client, response=response) + diff --git a/kindred-sdk/personal_crm_client/api/contact_fields/__init__.py b/kindred-sdk/personal_crm_client/api/contact_fields/__init__.py new file mode 100644 index 00000000..c9921b5f --- /dev/null +++ b/kindred-sdk/personal_crm_client/api/contact_fields/__init__.py @@ -0,0 +1 @@ +""" Contains endpoint functions for accessing the API """ diff --git a/kindred-sdk/personal_crm_client/api/contact_fields/contact_fields_create_contact_field_route.py b/kindred-sdk/personal_crm_client/api/contact_fields/contact_fields_create_contact_field_route.py new file mode 100644 index 00000000..b54d005d --- /dev/null +++ b/kindred-sdk/personal_crm_client/api/contact_fields/contact_fields_create_contact_field_route.py @@ -0,0 +1,195 @@ +from http import HTTPStatus +from typing import Any, cast +from urllib.parse import quote + +import httpx + +from ...client import AuthenticatedClient, Client +from ...types import Response, UNSET +from ... import errors + +from ...models.contact_field_create import ContactFieldCreate +from ...models.contact_field_public import ContactFieldPublic +from ...models.http_validation_error import HTTPValidationError +from typing import cast + + + +def _get_kwargs( + *, + body: ContactFieldCreate, + +) -> dict[str, Any]: + headers: dict[str, Any] = {} + + + + + + + _kwargs: dict[str, Any] = { + "method": "post", + "url": "/api/v1/contact-fields/", + } + + _kwargs["json"] = body.to_dict() + + + headers["Content-Type"] = "application/json" + + _kwargs["headers"] = headers + return _kwargs + + + +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> ContactFieldPublic | HTTPValidationError | None: + if response.status_code == 200: + response_200 = ContactFieldPublic.from_dict(response.json()) + + + + return response_200 + + if response.status_code == 422: + response_422 = HTTPValidationError.from_dict(response.json()) + + + + return response_422 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[ContactFieldPublic | HTTPValidationError]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + *, + client: AuthenticatedClient, + body: ContactFieldCreate, + +) -> Response[ContactFieldPublic | HTTPValidationError]: + """ Create Contact Field Route + + Create a new contact field. + + Args: + body (ContactFieldCreate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[ContactFieldPublic | HTTPValidationError] + """ + + + kwargs = _get_kwargs( + body=body, + + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + +def sync( + *, + client: AuthenticatedClient, + body: ContactFieldCreate, + +) -> ContactFieldPublic | HTTPValidationError | None: + """ Create Contact Field Route + + Create a new contact field. + + Args: + body (ContactFieldCreate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + ContactFieldPublic | HTTPValidationError + """ + + + return sync_detailed( + client=client, +body=body, + + ).parsed + +async def asyncio_detailed( + *, + client: AuthenticatedClient, + body: ContactFieldCreate, + +) -> Response[ContactFieldPublic | HTTPValidationError]: + """ Create Contact Field Route + + Create a new contact field. + + Args: + body (ContactFieldCreate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[ContactFieldPublic | HTTPValidationError] + """ + + + kwargs = _get_kwargs( + body=body, + + ) + + response = await client.get_async_httpx_client().request( + **kwargs + ) + + return _build_response(client=client, response=response) + +async def asyncio( + *, + client: AuthenticatedClient, + body: ContactFieldCreate, + +) -> ContactFieldPublic | HTTPValidationError | None: + """ Create Contact Field Route + + Create a new contact field. + + Args: + body (ContactFieldCreate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + ContactFieldPublic | HTTPValidationError + """ + + + return (await asyncio_detailed( + client=client, +body=body, + + )).parsed diff --git a/kindred-sdk/personal_crm_client/api/contact_fields/contact_fields_delete_contact_field.py b/kindred-sdk/personal_crm_client/api/contact_fields/contact_fields_delete_contact_field.py new file mode 100644 index 00000000..eeea1570 --- /dev/null +++ b/kindred-sdk/personal_crm_client/api/contact_fields/contact_fields_delete_contact_field.py @@ -0,0 +1,184 @@ +from http import HTTPStatus +from typing import Any, cast +from urllib.parse import quote + +import httpx + +from ...client import AuthenticatedClient, Client +from ...types import Response, UNSET +from ... import errors + +from ...models.http_validation_error import HTTPValidationError +from typing import cast +from uuid import UUID + + + +def _get_kwargs( + field_id: UUID, + +) -> dict[str, Any]: + + + + + + + _kwargs: dict[str, Any] = { + "method": "delete", + "url": "/api/v1/contact-fields/{field_id}".format(field_id=quote(str(field_id), safe=""),), + } + + + return _kwargs + + + +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Any | HTTPValidationError | None: + if response.status_code == 200: + response_200 = response.json() + return response_200 + + if response.status_code == 422: + response_422 = HTTPValidationError.from_dict(response.json()) + + + + return response_422 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[Any | HTTPValidationError]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + field_id: UUID, + *, + client: AuthenticatedClient, + +) -> Response[Any | HTTPValidationError]: + """ Delete Contact Field + + Delete a contact field. + + Args: + field_id (UUID): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Any | HTTPValidationError] + """ + + + kwargs = _get_kwargs( + field_id=field_id, + + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + +def sync( + field_id: UUID, + *, + client: AuthenticatedClient, + +) -> Any | HTTPValidationError | None: + """ Delete Contact Field + + Delete a contact field. + + Args: + field_id (UUID): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Any | HTTPValidationError + """ + + + return sync_detailed( + field_id=field_id, +client=client, + + ).parsed + +async def asyncio_detailed( + field_id: UUID, + *, + client: AuthenticatedClient, + +) -> Response[Any | HTTPValidationError]: + """ Delete Contact Field + + Delete a contact field. + + Args: + field_id (UUID): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Any | HTTPValidationError] + """ + + + kwargs = _get_kwargs( + field_id=field_id, + + ) + + response = await client.get_async_httpx_client().request( + **kwargs + ) + + return _build_response(client=client, response=response) + +async def asyncio( + field_id: UUID, + *, + client: AuthenticatedClient, + +) -> Any | HTTPValidationError | None: + """ Delete Contact Field + + Delete a contact field. + + Args: + field_id (UUID): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Any | HTTPValidationError + """ + + + return (await asyncio_detailed( + field_id=field_id, +client=client, + + )).parsed diff --git a/kindred-sdk/personal_crm_client/api/contact_fields/contact_fields_list_contact_fields.py b/kindred-sdk/personal_crm_client/api/contact_fields/contact_fields_list_contact_fields.py new file mode 100644 index 00000000..2b1c555c --- /dev/null +++ b/kindred-sdk/personal_crm_client/api/contact_fields/contact_fields_list_contact_fields.py @@ -0,0 +1,221 @@ +from http import HTTPStatus +from typing import Any, cast +from urllib.parse import quote + +import httpx + +from ...client import AuthenticatedClient, Client +from ...types import Response, UNSET +from ... import errors + +from ...models.http_validation_error import HTTPValidationError +from ...types import UNSET, Unset +from typing import cast +from uuid import UUID + + + +def _get_kwargs( + contact_id: UUID, + *, + skip: int | Unset = 0, + limit: int | Unset = 100, + +) -> dict[str, Any]: + + + + + params: dict[str, Any] = {} + + params["skip"] = skip + + params["limit"] = limit + + + params = {k: v for k, v in params.items() if v is not UNSET and v is not None} + + + _kwargs: dict[str, Any] = { + "method": "get", + "url": "/api/v1/contact-fields/contact/{contact_id}".format(contact_id=quote(str(contact_id), safe=""),), + "params": params, + } + + + return _kwargs + + + +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Any | HTTPValidationError | None: + if response.status_code == 200: + response_200 = response.json() + return response_200 + + if response.status_code == 422: + response_422 = HTTPValidationError.from_dict(response.json()) + + + + return response_422 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[Any | HTTPValidationError]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + contact_id: UUID, + *, + client: AuthenticatedClient, + skip: int | Unset = 0, + limit: int | Unset = 100, + +) -> Response[Any | HTTPValidationError]: + """ List Contact Fields + + List all fields for a contact. + + Args: + contact_id (UUID): + skip (int | Unset): Default: 0. + limit (int | Unset): Default: 100. + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Any | HTTPValidationError] + """ + + + kwargs = _get_kwargs( + contact_id=contact_id, +skip=skip, +limit=limit, + + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + +def sync( + contact_id: UUID, + *, + client: AuthenticatedClient, + skip: int | Unset = 0, + limit: int | Unset = 100, + +) -> Any | HTTPValidationError | None: + """ List Contact Fields + + List all fields for a contact. + + Args: + contact_id (UUID): + skip (int | Unset): Default: 0. + limit (int | Unset): Default: 100. + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Any | HTTPValidationError + """ + + + return sync_detailed( + contact_id=contact_id, +client=client, +skip=skip, +limit=limit, + + ).parsed + +async def asyncio_detailed( + contact_id: UUID, + *, + client: AuthenticatedClient, + skip: int | Unset = 0, + limit: int | Unset = 100, + +) -> Response[Any | HTTPValidationError]: + """ List Contact Fields + + List all fields for a contact. + + Args: + contact_id (UUID): + skip (int | Unset): Default: 0. + limit (int | Unset): Default: 100. + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Any | HTTPValidationError] + """ + + + kwargs = _get_kwargs( + contact_id=contact_id, +skip=skip, +limit=limit, + + ) + + response = await client.get_async_httpx_client().request( + **kwargs + ) + + return _build_response(client=client, response=response) + +async def asyncio( + contact_id: UUID, + *, + client: AuthenticatedClient, + skip: int | Unset = 0, + limit: int | Unset = 100, + +) -> Any | HTTPValidationError | None: + """ List Contact Fields + + List all fields for a contact. + + Args: + contact_id (UUID): + skip (int | Unset): Default: 0. + limit (int | Unset): Default: 100. + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Any | HTTPValidationError + """ + + + return (await asyncio_detailed( + contact_id=contact_id, +client=client, +skip=skip, +limit=limit, + + )).parsed diff --git a/kindred-sdk/personal_crm_client/api/contact_fields/contact_fields_update_contact_field.py b/kindred-sdk/personal_crm_client/api/contact_fields/contact_fields_update_contact_field.py new file mode 100644 index 00000000..32616e2d --- /dev/null +++ b/kindred-sdk/personal_crm_client/api/contact_fields/contact_fields_update_contact_field.py @@ -0,0 +1,209 @@ +from http import HTTPStatus +from typing import Any, cast +from urllib.parse import quote + +import httpx + +from ...client import AuthenticatedClient, Client +from ...types import Response, UNSET +from ... import errors + +from ...models.contact_field_public import ContactFieldPublic +from ...models.contact_field_update import ContactFieldUpdate +from ...models.http_validation_error import HTTPValidationError +from typing import cast +from uuid import UUID + + + +def _get_kwargs( + field_id: UUID, + *, + body: ContactFieldUpdate, + +) -> dict[str, Any]: + headers: dict[str, Any] = {} + + + + + + + _kwargs: dict[str, Any] = { + "method": "patch", + "url": "/api/v1/contact-fields/{field_id}".format(field_id=quote(str(field_id), safe=""),), + } + + _kwargs["json"] = body.to_dict() + + + headers["Content-Type"] = "application/json" + + _kwargs["headers"] = headers + return _kwargs + + + +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> ContactFieldPublic | HTTPValidationError | None: + if response.status_code == 200: + response_200 = ContactFieldPublic.from_dict(response.json()) + + + + return response_200 + + if response.status_code == 422: + response_422 = HTTPValidationError.from_dict(response.json()) + + + + return response_422 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[ContactFieldPublic | HTTPValidationError]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + field_id: UUID, + *, + client: AuthenticatedClient, + body: ContactFieldUpdate, + +) -> Response[ContactFieldPublic | HTTPValidationError]: + """ Update Contact Field + + Update a contact field. + + Args: + field_id (UUID): + body (ContactFieldUpdate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[ContactFieldPublic | HTTPValidationError] + """ + + + kwargs = _get_kwargs( + field_id=field_id, +body=body, + + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + +def sync( + field_id: UUID, + *, + client: AuthenticatedClient, + body: ContactFieldUpdate, + +) -> ContactFieldPublic | HTTPValidationError | None: + """ Update Contact Field + + Update a contact field. + + Args: + field_id (UUID): + body (ContactFieldUpdate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + ContactFieldPublic | HTTPValidationError + """ + + + return sync_detailed( + field_id=field_id, +client=client, +body=body, + + ).parsed + +async def asyncio_detailed( + field_id: UUID, + *, + client: AuthenticatedClient, + body: ContactFieldUpdate, + +) -> Response[ContactFieldPublic | HTTPValidationError]: + """ Update Contact Field + + Update a contact field. + + Args: + field_id (UUID): + body (ContactFieldUpdate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[ContactFieldPublic | HTTPValidationError] + """ + + + kwargs = _get_kwargs( + field_id=field_id, +body=body, + + ) + + response = await client.get_async_httpx_client().request( + **kwargs + ) + + return _build_response(client=client, response=response) + +async def asyncio( + field_id: UUID, + *, + client: AuthenticatedClient, + body: ContactFieldUpdate, + +) -> ContactFieldPublic | HTTPValidationError | None: + """ Update Contact Field + + Update a contact field. + + Args: + field_id (UUID): + body (ContactFieldUpdate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + ContactFieldPublic | HTTPValidationError + """ + + + return (await asyncio_detailed( + field_id=field_id, +client=client, +body=body, + + )).parsed diff --git a/kindred-sdk/personal_crm_client/api/contacts/__init__.py b/kindred-sdk/personal_crm_client/api/contacts/__init__.py new file mode 100644 index 00000000..c9921b5f --- /dev/null +++ b/kindred-sdk/personal_crm_client/api/contacts/__init__.py @@ -0,0 +1 @@ +""" Contains endpoint functions for accessing the API """ diff --git a/kindred-sdk/personal_crm_client/api/contacts/contacts_create_contact.py b/kindred-sdk/personal_crm_client/api/contacts/contacts_create_contact.py new file mode 100644 index 00000000..bc49098d --- /dev/null +++ b/kindred-sdk/personal_crm_client/api/contacts/contacts_create_contact.py @@ -0,0 +1,195 @@ +from http import HTTPStatus +from typing import Any, cast +from urllib.parse import quote + +import httpx + +from ...client import AuthenticatedClient, Client +from ...types import Response, UNSET +from ... import errors + +from ...models.contact_create import ContactCreate +from ...models.contact_public import ContactPublic +from ...models.http_validation_error import HTTPValidationError +from typing import cast + + + +def _get_kwargs( + *, + body: ContactCreate, + +) -> dict[str, Any]: + headers: dict[str, Any] = {} + + + + + + + _kwargs: dict[str, Any] = { + "method": "post", + "url": "/api/v1/contacts/", + } + + _kwargs["json"] = body.to_dict() + + + headers["Content-Type"] = "application/json" + + _kwargs["headers"] = headers + return _kwargs + + + +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> ContactPublic | HTTPValidationError | None: + if response.status_code == 200: + response_200 = ContactPublic.from_dict(response.json()) + + + + return response_200 + + if response.status_code == 422: + response_422 = HTTPValidationError.from_dict(response.json()) + + + + return response_422 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[ContactPublic | HTTPValidationError]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + *, + client: AuthenticatedClient, + body: ContactCreate, + +) -> Response[ContactPublic | HTTPValidationError]: + """ Create Contact + + Create a new contact. + + Args: + body (ContactCreate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[ContactPublic | HTTPValidationError] + """ + + + kwargs = _get_kwargs( + body=body, + + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + +def sync( + *, + client: AuthenticatedClient, + body: ContactCreate, + +) -> ContactPublic | HTTPValidationError | None: + """ Create Contact + + Create a new contact. + + Args: + body (ContactCreate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + ContactPublic | HTTPValidationError + """ + + + return sync_detailed( + client=client, +body=body, + + ).parsed + +async def asyncio_detailed( + *, + client: AuthenticatedClient, + body: ContactCreate, + +) -> Response[ContactPublic | HTTPValidationError]: + """ Create Contact + + Create a new contact. + + Args: + body (ContactCreate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[ContactPublic | HTTPValidationError] + """ + + + kwargs = _get_kwargs( + body=body, + + ) + + response = await client.get_async_httpx_client().request( + **kwargs + ) + + return _build_response(client=client, response=response) + +async def asyncio( + *, + client: AuthenticatedClient, + body: ContactCreate, + +) -> ContactPublic | HTTPValidationError | None: + """ Create Contact + + Create a new contact. + + Args: + body (ContactCreate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + ContactPublic | HTTPValidationError + """ + + + return (await asyncio_detailed( + client=client, +body=body, + + )).parsed diff --git a/kindred-sdk/personal_crm_client/api/contacts/contacts_delete_contact.py b/kindred-sdk/personal_crm_client/api/contacts/contacts_delete_contact.py new file mode 100644 index 00000000..6c48bc76 --- /dev/null +++ b/kindred-sdk/personal_crm_client/api/contacts/contacts_delete_contact.py @@ -0,0 +1,204 @@ +from http import HTTPStatus +from typing import Any, cast +from urllib.parse import quote + +import httpx + +from ...client import AuthenticatedClient, Client +from ...types import Response, UNSET +from ... import errors + +from ...models.http_validation_error import HTTPValidationError +from typing import cast +from uuid import UUID + + + +def _get_kwargs( + contact_id: UUID, + +) -> dict[str, Any]: + + + + + + + _kwargs: dict[str, Any] = { + "method": "delete", + "url": "/api/v1/contacts/{contact_id}".format(contact_id=quote(str(contact_id), safe=""),), + } + + + return _kwargs + + + +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Any | HTTPValidationError | None: + if response.status_code == 200: + response_200 = response.json() + return response_200 + + if response.status_code == 422: + response_422 = HTTPValidationError.from_dict(response.json()) + + + + return response_422 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[Any | HTTPValidationError]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + contact_id: UUID, + *, + client: AuthenticatedClient, + +) -> Response[Any | HTTPValidationError]: + """ Delete Contact + + Soft-delete a contact. + + Sets ``deleted_at`` instead of removing the row, so the contact and its + related data (notes, interactions, addresses, etc.) can be restored. Use + ``POST /contacts/{id}/restore`` to recover, or pass ``only_deleted=true`` + to ``GET /contacts/`` to view the trash. + + Args: + contact_id (UUID): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Any | HTTPValidationError] + """ + + + kwargs = _get_kwargs( + contact_id=contact_id, + + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + +def sync( + contact_id: UUID, + *, + client: AuthenticatedClient, + +) -> Any | HTTPValidationError | None: + """ Delete Contact + + Soft-delete a contact. + + Sets ``deleted_at`` instead of removing the row, so the contact and its + related data (notes, interactions, addresses, etc.) can be restored. Use + ``POST /contacts/{id}/restore`` to recover, or pass ``only_deleted=true`` + to ``GET /contacts/`` to view the trash. + + Args: + contact_id (UUID): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Any | HTTPValidationError + """ + + + return sync_detailed( + contact_id=contact_id, +client=client, + + ).parsed + +async def asyncio_detailed( + contact_id: UUID, + *, + client: AuthenticatedClient, + +) -> Response[Any | HTTPValidationError]: + """ Delete Contact + + Soft-delete a contact. + + Sets ``deleted_at`` instead of removing the row, so the contact and its + related data (notes, interactions, addresses, etc.) can be restored. Use + ``POST /contacts/{id}/restore`` to recover, or pass ``only_deleted=true`` + to ``GET /contacts/`` to view the trash. + + Args: + contact_id (UUID): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Any | HTTPValidationError] + """ + + + kwargs = _get_kwargs( + contact_id=contact_id, + + ) + + response = await client.get_async_httpx_client().request( + **kwargs + ) + + return _build_response(client=client, response=response) + +async def asyncio( + contact_id: UUID, + *, + client: AuthenticatedClient, + +) -> Any | HTTPValidationError | None: + """ Delete Contact + + Soft-delete a contact. + + Sets ``deleted_at`` instead of removing the row, so the contact and its + related data (notes, interactions, addresses, etc.) can be restored. Use + ``POST /contacts/{id}/restore`` to recover, or pass ``only_deleted=true`` + to ``GET /contacts/`` to view the trash. + + Args: + contact_id (UUID): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Any | HTTPValidationError + """ + + + return (await asyncio_detailed( + contact_id=contact_id, +client=client, + + )).parsed diff --git a/kindred-sdk/personal_crm_client/api/contacts/contacts_get_contact.py b/kindred-sdk/personal_crm_client/api/contacts/contacts_get_contact.py new file mode 100644 index 00000000..09d4d70e --- /dev/null +++ b/kindred-sdk/personal_crm_client/api/contacts/contacts_get_contact.py @@ -0,0 +1,188 @@ +from http import HTTPStatus +from typing import Any, cast +from urllib.parse import quote + +import httpx + +from ...client import AuthenticatedClient, Client +from ...types import Response, UNSET +from ... import errors + +from ...models.contact_public import ContactPublic +from ...models.http_validation_error import HTTPValidationError +from typing import cast +from uuid import UUID + + + +def _get_kwargs( + contact_id: UUID, + +) -> dict[str, Any]: + + + + + + + _kwargs: dict[str, Any] = { + "method": "get", + "url": "/api/v1/contacts/{contact_id}".format(contact_id=quote(str(contact_id), safe=""),), + } + + + return _kwargs + + + +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> ContactPublic | HTTPValidationError | None: + if response.status_code == 200: + response_200 = ContactPublic.from_dict(response.json()) + + + + return response_200 + + if response.status_code == 422: + response_422 = HTTPValidationError.from_dict(response.json()) + + + + return response_422 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[ContactPublic | HTTPValidationError]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + contact_id: UUID, + *, + client: AuthenticatedClient, + +) -> Response[ContactPublic | HTTPValidationError]: + """ Get Contact + + Get a single contact by ID. + + Args: + contact_id (UUID): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[ContactPublic | HTTPValidationError] + """ + + + kwargs = _get_kwargs( + contact_id=contact_id, + + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + +def sync( + contact_id: UUID, + *, + client: AuthenticatedClient, + +) -> ContactPublic | HTTPValidationError | None: + """ Get Contact + + Get a single contact by ID. + + Args: + contact_id (UUID): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + ContactPublic | HTTPValidationError + """ + + + return sync_detailed( + contact_id=contact_id, +client=client, + + ).parsed + +async def asyncio_detailed( + contact_id: UUID, + *, + client: AuthenticatedClient, + +) -> Response[ContactPublic | HTTPValidationError]: + """ Get Contact + + Get a single contact by ID. + + Args: + contact_id (UUID): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[ContactPublic | HTTPValidationError] + """ + + + kwargs = _get_kwargs( + contact_id=contact_id, + + ) + + response = await client.get_async_httpx_client().request( + **kwargs + ) + + return _build_response(client=client, response=response) + +async def asyncio( + contact_id: UUID, + *, + client: AuthenticatedClient, + +) -> ContactPublic | HTTPValidationError | None: + """ Get Contact + + Get a single contact by ID. + + Args: + contact_id (UUID): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + ContactPublic | HTTPValidationError + """ + + + return (await asyncio_detailed( + contact_id=contact_id, +client=client, + + )).parsed diff --git a/kindred-sdk/personal_crm_client/api/contacts/contacts_get_contact_household.py b/kindred-sdk/personal_crm_client/api/contacts/contacts_get_contact_household.py new file mode 100644 index 00000000..8c5bdb72 --- /dev/null +++ b/kindred-sdk/personal_crm_client/api/contacts/contacts_get_contact_household.py @@ -0,0 +1,196 @@ +from http import HTTPStatus +from typing import Any, cast +from urllib.parse import quote + +import httpx + +from ...client import AuthenticatedClient, Client +from ...types import Response, UNSET +from ... import errors + +from ...models.http_validation_error import HTTPValidationError +from typing import cast +from uuid import UUID + + + +def _get_kwargs( + contact_id: UUID, + +) -> dict[str, Any]: + + + + + + + _kwargs: dict[str, Any] = { + "method": "get", + "url": "/api/v1/contacts/{contact_id}/household".format(contact_id=quote(str(contact_id), safe=""),), + } + + + return _kwargs + + + +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Any | HTTPValidationError | None: + if response.status_code == 200: + response_200 = response.json() + return response_200 + + if response.status_code == 422: + response_422 = HTTPValidationError.from_dict(response.json()) + + + + return response_422 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[Any | HTTPValidationError]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + contact_id: UUID, + *, + client: AuthenticatedClient, + +) -> Response[Any | HTTPValidationError]: + """ Get Contact Household + + Get household members for a contact. + + Derives household/family members via BFS walk of relationships + (spouse, child, parent, sibling, etc.). Returns names and ages. + + Args: + contact_id (UUID): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Any | HTTPValidationError] + """ + + + kwargs = _get_kwargs( + contact_id=contact_id, + + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + +def sync( + contact_id: UUID, + *, + client: AuthenticatedClient, + +) -> Any | HTTPValidationError | None: + """ Get Contact Household + + Get household members for a contact. + + Derives household/family members via BFS walk of relationships + (spouse, child, parent, sibling, etc.). Returns names and ages. + + Args: + contact_id (UUID): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Any | HTTPValidationError + """ + + + return sync_detailed( + contact_id=contact_id, +client=client, + + ).parsed + +async def asyncio_detailed( + contact_id: UUID, + *, + client: AuthenticatedClient, + +) -> Response[Any | HTTPValidationError]: + """ Get Contact Household + + Get household members for a contact. + + Derives household/family members via BFS walk of relationships + (spouse, child, parent, sibling, etc.). Returns names and ages. + + Args: + contact_id (UUID): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Any | HTTPValidationError] + """ + + + kwargs = _get_kwargs( + contact_id=contact_id, + + ) + + response = await client.get_async_httpx_client().request( + **kwargs + ) + + return _build_response(client=client, response=response) + +async def asyncio( + contact_id: UUID, + *, + client: AuthenticatedClient, + +) -> Any | HTTPValidationError | None: + """ Get Contact Household + + Get household members for a contact. + + Derives household/family members via BFS walk of relationships + (spouse, child, parent, sibling, etc.). Returns names and ages. + + Args: + contact_id (UUID): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Any | HTTPValidationError + """ + + + return (await asyncio_detailed( + contact_id=contact_id, +client=client, + + )).parsed diff --git a/kindred-sdk/personal_crm_client/api/contacts/contacts_list_contact_mentions.py b/kindred-sdk/personal_crm_client/api/contacts/contacts_list_contact_mentions.py new file mode 100644 index 00000000..73115c7c --- /dev/null +++ b/kindred-sdk/personal_crm_client/api/contacts/contacts_list_contact_mentions.py @@ -0,0 +1,193 @@ +from http import HTTPStatus +from typing import Any, cast +from urllib.parse import quote + +import httpx + +from ...client import AuthenticatedClient, Client +from ...types import Response, UNSET +from ... import errors + +from ...models.http_validation_error import HTTPValidationError +from ...models.note_mention_public import NoteMentionPublic +from typing import cast +from uuid import UUID + + + +def _get_kwargs( + contact_id: UUID, + +) -> dict[str, Any]: + + + + + + + _kwargs: dict[str, Any] = { + "method": "get", + "url": "/api/v1/contacts/{contact_id}/mentions".format(contact_id=quote(str(contact_id), safe=""),), + } + + + return _kwargs + + + +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> HTTPValidationError | list[NoteMentionPublic] | None: + if response.status_code == 200: + response_200 = [] + _response_200 = response.json() + for response_200_item_data in (_response_200): + response_200_item = NoteMentionPublic.from_dict(response_200_item_data) + + + + response_200.append(response_200_item) + + return response_200 + + if response.status_code == 422: + response_422 = HTTPValidationError.from_dict(response.json()) + + + + return response_422 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[HTTPValidationError | list[NoteMentionPublic]]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + contact_id: UUID, + *, + client: AuthenticatedClient, + +) -> Response[HTTPValidationError | list[NoteMentionPublic]]: + """ List Contact Mentions + + List notes that @-mention this contact, with the source (authoring) contact. + + Args: + contact_id (UUID): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[HTTPValidationError | list[NoteMentionPublic]] + """ + + + kwargs = _get_kwargs( + contact_id=contact_id, + + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + +def sync( + contact_id: UUID, + *, + client: AuthenticatedClient, + +) -> HTTPValidationError | list[NoteMentionPublic] | None: + """ List Contact Mentions + + List notes that @-mention this contact, with the source (authoring) contact. + + Args: + contact_id (UUID): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + HTTPValidationError | list[NoteMentionPublic] + """ + + + return sync_detailed( + contact_id=contact_id, +client=client, + + ).parsed + +async def asyncio_detailed( + contact_id: UUID, + *, + client: AuthenticatedClient, + +) -> Response[HTTPValidationError | list[NoteMentionPublic]]: + """ List Contact Mentions + + List notes that @-mention this contact, with the source (authoring) contact. + + Args: + contact_id (UUID): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[HTTPValidationError | list[NoteMentionPublic]] + """ + + + kwargs = _get_kwargs( + contact_id=contact_id, + + ) + + response = await client.get_async_httpx_client().request( + **kwargs + ) + + return _build_response(client=client, response=response) + +async def asyncio( + contact_id: UUID, + *, + client: AuthenticatedClient, + +) -> HTTPValidationError | list[NoteMentionPublic] | None: + """ List Contact Mentions + + List notes that @-mention this contact, with the source (authoring) contact. + + Args: + contact_id (UUID): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + HTTPValidationError | list[NoteMentionPublic] + """ + + + return (await asyncio_detailed( + contact_id=contact_id, +client=client, + + )).parsed diff --git a/kindred-sdk/personal_crm_client/api/contacts/contacts_list_contacts.py b/kindred-sdk/personal_crm_client/api/contacts/contacts_list_contacts.py new file mode 100644 index 00000000..071d3c2b --- /dev/null +++ b/kindred-sdk/personal_crm_client/api/contacts/contacts_list_contacts.py @@ -0,0 +1,425 @@ +from http import HTTPStatus +from typing import Any, cast +from urllib.parse import quote + +import httpx + +from ...client import AuthenticatedClient, Client +from ...types import Response, UNSET +from ... import errors + +from ...models.contacts_public import ContactsPublic +from ...models.http_validation_error import HTTPValidationError +from ...types import UNSET, Unset +from typing import cast +from uuid import UUID + + + +def _get_kwargs( + *, + skip: int | Unset = 0, + limit: int | Unset = 100, + search: None | str | Unset = UNSET, + tag_id: None | Unset | UUID = UNSET, + group_id: None | Unset | UUID = UNSET, + is_favorite: bool | None | Unset = UNSET, + is_archived: bool | None | Unset = UNSET, + stage: None | str | Unset = UNSET, + include_deleted: bool | Unset = False, + only_deleted: bool | Unset = False, + ids: list[UUID] | None | Unset = UNSET, + +) -> dict[str, Any]: + + + + + params: dict[str, Any] = {} + + params["skip"] = skip + + params["limit"] = limit + + json_search: None | str | Unset + if isinstance(search, Unset): + json_search = UNSET + else: + json_search = search + params["search"] = json_search + + json_tag_id: None | str | Unset + if isinstance(tag_id, Unset): + json_tag_id = UNSET + elif isinstance(tag_id, UUID): + json_tag_id = str(tag_id) + else: + json_tag_id = tag_id + params["tag_id"] = json_tag_id + + json_group_id: None | str | Unset + if isinstance(group_id, Unset): + json_group_id = UNSET + elif isinstance(group_id, UUID): + json_group_id = str(group_id) + else: + json_group_id = group_id + params["group_id"] = json_group_id + + json_is_favorite: bool | None | Unset + if isinstance(is_favorite, Unset): + json_is_favorite = UNSET + else: + json_is_favorite = is_favorite + params["is_favorite"] = json_is_favorite + + json_is_archived: bool | None | Unset + if isinstance(is_archived, Unset): + json_is_archived = UNSET + else: + json_is_archived = is_archived + params["is_archived"] = json_is_archived + + json_stage: None | str | Unset + if isinstance(stage, Unset): + json_stage = UNSET + else: + json_stage = stage + params["stage"] = json_stage + + params["include_deleted"] = include_deleted + + params["only_deleted"] = only_deleted + + json_ids: list[str] | None | Unset + if isinstance(ids, Unset): + json_ids = UNSET + elif isinstance(ids, list): + json_ids = [] + for ids_type_0_item_data in ids: + ids_type_0_item = str(ids_type_0_item_data) + json_ids.append(ids_type_0_item) + + + else: + json_ids = ids + params["ids"] = json_ids + + + params = {k: v for k, v in params.items() if v is not UNSET and v is not None} + + + _kwargs: dict[str, Any] = { + "method": "get", + "url": "/api/v1/contacts/", + "params": params, + } + + + return _kwargs + + + +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> ContactsPublic | HTTPValidationError | None: + if response.status_code == 200: + response_200 = ContactsPublic.from_dict(response.json()) + + + + return response_200 + + if response.status_code == 422: + response_422 = HTTPValidationError.from_dict(response.json()) + + + + return response_422 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[ContactsPublic | HTTPValidationError]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + *, + client: AuthenticatedClient, + skip: int | Unset = 0, + limit: int | Unset = 100, + search: None | str | Unset = UNSET, + tag_id: None | Unset | UUID = UNSET, + group_id: None | Unset | UUID = UNSET, + is_favorite: bool | None | Unset = UNSET, + is_archived: bool | None | Unset = UNSET, + stage: None | str | Unset = UNSET, + include_deleted: bool | Unset = False, + only_deleted: bool | Unset = False, + ids: list[UUID] | None | Unset = UNSET, + +) -> Response[ContactsPublic | HTTPValidationError]: + """ List Contacts + + List contacts with filtering. + + Pass `ids=&ids=` to fetch a specific batch of contacts (useful for + hydrating references from other resources). When `ids` is provided, the default + `is_archived=false` filter is lifted so callers can resolve archived rows too. + + Soft-deleted contacts (``deleted_at`` set) are hidden by default. Pass + ``include_deleted=true`` to surface them alongside live rows, or + ``only_deleted=true`` to fetch the trash view exclusively. + + Args: + skip (int | Unset): Default: 0. + limit (int | Unset): Default: 100. + search (None | str | Unset): + tag_id (None | Unset | UUID): + group_id (None | Unset | UUID): + is_favorite (bool | None | Unset): + is_archived (bool | None | Unset): + stage (None | str | Unset): + include_deleted (bool | Unset): Default: False. + only_deleted (bool | Unset): Default: False. + ids (list[UUID] | None | Unset): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[ContactsPublic | HTTPValidationError] + """ + + + kwargs = _get_kwargs( + skip=skip, +limit=limit, +search=search, +tag_id=tag_id, +group_id=group_id, +is_favorite=is_favorite, +is_archived=is_archived, +stage=stage, +include_deleted=include_deleted, +only_deleted=only_deleted, +ids=ids, + + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + +def sync( + *, + client: AuthenticatedClient, + skip: int | Unset = 0, + limit: int | Unset = 100, + search: None | str | Unset = UNSET, + tag_id: None | Unset | UUID = UNSET, + group_id: None | Unset | UUID = UNSET, + is_favorite: bool | None | Unset = UNSET, + is_archived: bool | None | Unset = UNSET, + stage: None | str | Unset = UNSET, + include_deleted: bool | Unset = False, + only_deleted: bool | Unset = False, + ids: list[UUID] | None | Unset = UNSET, + +) -> ContactsPublic | HTTPValidationError | None: + """ List Contacts + + List contacts with filtering. + + Pass `ids=&ids=` to fetch a specific batch of contacts (useful for + hydrating references from other resources). When `ids` is provided, the default + `is_archived=false` filter is lifted so callers can resolve archived rows too. + + Soft-deleted contacts (``deleted_at`` set) are hidden by default. Pass + ``include_deleted=true`` to surface them alongside live rows, or + ``only_deleted=true`` to fetch the trash view exclusively. + + Args: + skip (int | Unset): Default: 0. + limit (int | Unset): Default: 100. + search (None | str | Unset): + tag_id (None | Unset | UUID): + group_id (None | Unset | UUID): + is_favorite (bool | None | Unset): + is_archived (bool | None | Unset): + stage (None | str | Unset): + include_deleted (bool | Unset): Default: False. + only_deleted (bool | Unset): Default: False. + ids (list[UUID] | None | Unset): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + ContactsPublic | HTTPValidationError + """ + + + return sync_detailed( + client=client, +skip=skip, +limit=limit, +search=search, +tag_id=tag_id, +group_id=group_id, +is_favorite=is_favorite, +is_archived=is_archived, +stage=stage, +include_deleted=include_deleted, +only_deleted=only_deleted, +ids=ids, + + ).parsed + +async def asyncio_detailed( + *, + client: AuthenticatedClient, + skip: int | Unset = 0, + limit: int | Unset = 100, + search: None | str | Unset = UNSET, + tag_id: None | Unset | UUID = UNSET, + group_id: None | Unset | UUID = UNSET, + is_favorite: bool | None | Unset = UNSET, + is_archived: bool | None | Unset = UNSET, + stage: None | str | Unset = UNSET, + include_deleted: bool | Unset = False, + only_deleted: bool | Unset = False, + ids: list[UUID] | None | Unset = UNSET, + +) -> Response[ContactsPublic | HTTPValidationError]: + """ List Contacts + + List contacts with filtering. + + Pass `ids=&ids=` to fetch a specific batch of contacts (useful for + hydrating references from other resources). When `ids` is provided, the default + `is_archived=false` filter is lifted so callers can resolve archived rows too. + + Soft-deleted contacts (``deleted_at`` set) are hidden by default. Pass + ``include_deleted=true`` to surface them alongside live rows, or + ``only_deleted=true`` to fetch the trash view exclusively. + + Args: + skip (int | Unset): Default: 0. + limit (int | Unset): Default: 100. + search (None | str | Unset): + tag_id (None | Unset | UUID): + group_id (None | Unset | UUID): + is_favorite (bool | None | Unset): + is_archived (bool | None | Unset): + stage (None | str | Unset): + include_deleted (bool | Unset): Default: False. + only_deleted (bool | Unset): Default: False. + ids (list[UUID] | None | Unset): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[ContactsPublic | HTTPValidationError] + """ + + + kwargs = _get_kwargs( + skip=skip, +limit=limit, +search=search, +tag_id=tag_id, +group_id=group_id, +is_favorite=is_favorite, +is_archived=is_archived, +stage=stage, +include_deleted=include_deleted, +only_deleted=only_deleted, +ids=ids, + + ) + + response = await client.get_async_httpx_client().request( + **kwargs + ) + + return _build_response(client=client, response=response) + +async def asyncio( + *, + client: AuthenticatedClient, + skip: int | Unset = 0, + limit: int | Unset = 100, + search: None | str | Unset = UNSET, + tag_id: None | Unset | UUID = UNSET, + group_id: None | Unset | UUID = UNSET, + is_favorite: bool | None | Unset = UNSET, + is_archived: bool | None | Unset = UNSET, + stage: None | str | Unset = UNSET, + include_deleted: bool | Unset = False, + only_deleted: bool | Unset = False, + ids: list[UUID] | None | Unset = UNSET, + +) -> ContactsPublic | HTTPValidationError | None: + """ List Contacts + + List contacts with filtering. + + Pass `ids=&ids=` to fetch a specific batch of contacts (useful for + hydrating references from other resources). When `ids` is provided, the default + `is_archived=false` filter is lifted so callers can resolve archived rows too. + + Soft-deleted contacts (``deleted_at`` set) are hidden by default. Pass + ``include_deleted=true`` to surface them alongside live rows, or + ``only_deleted=true`` to fetch the trash view exclusively. + + Args: + skip (int | Unset): Default: 0. + limit (int | Unset): Default: 100. + search (None | str | Unset): + tag_id (None | Unset | UUID): + group_id (None | Unset | UUID): + is_favorite (bool | None | Unset): + is_archived (bool | None | Unset): + stage (None | str | Unset): + include_deleted (bool | Unset): Default: False. + only_deleted (bool | Unset): Default: False. + ids (list[UUID] | None | Unset): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + ContactsPublic | HTTPValidationError + """ + + + return (await asyncio_detailed( + client=client, +skip=skip, +limit=limit, +search=search, +tag_id=tag_id, +group_id=group_id, +is_favorite=is_favorite, +is_archived=is_archived, +stage=stage, +include_deleted=include_deleted, +only_deleted=only_deleted, +ids=ids, + + )).parsed diff --git a/kindred-sdk/personal_crm_client/api/contacts/contacts_list_losing_touch.py b/kindred-sdk/personal_crm_client/api/contacts/contacts_list_losing_touch.py new file mode 100644 index 00000000..f5ef3cb4 --- /dev/null +++ b/kindred-sdk/personal_crm_client/api/contacts/contacts_list_losing_touch.py @@ -0,0 +1,212 @@ +from http import HTTPStatus +from typing import Any, cast +from urllib.parse import quote + +import httpx + +from ...client import AuthenticatedClient, Client +from ...types import Response, UNSET +from ... import errors + +from ...models.contacts_public import ContactsPublic +from ...models.http_validation_error import HTTPValidationError +from ...types import UNSET, Unset +from typing import cast + + + +def _get_kwargs( + *, + limit: int | Unset = 20, + +) -> dict[str, Any]: + + + + + params: dict[str, Any] = {} + + params["limit"] = limit + + + params = {k: v for k, v in params.items() if v is not UNSET and v is not None} + + + _kwargs: dict[str, Any] = { + "method": "get", + "url": "/api/v1/contacts/losing-touch", + "params": params, + } + + + return _kwargs + + + +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> ContactsPublic | HTTPValidationError | None: + if response.status_code == 200: + response_200 = ContactsPublic.from_dict(response.json()) + + + + return response_200 + + if response.status_code == 422: + response_422 = HTTPValidationError.from_dict(response.json()) + + + + return response_422 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[ContactsPublic | HTTPValidationError]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + *, + client: AuthenticatedClient, + limit: int | Unset = 20, + +) -> Response[ContactsPublic | HTTPValidationError]: + """ List Losing Touch + + Return contacts whose cadence has been exceeded. + + A contact is 'losing touch' if: + - contact_frequency_days is set + - last_contacted_at is NULL or older than contact_frequency_days ago + + Args: + limit (int | Unset): Default: 20. + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[ContactsPublic | HTTPValidationError] + """ + + + kwargs = _get_kwargs( + limit=limit, + + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + +def sync( + *, + client: AuthenticatedClient, + limit: int | Unset = 20, + +) -> ContactsPublic | HTTPValidationError | None: + """ List Losing Touch + + Return contacts whose cadence has been exceeded. + + A contact is 'losing touch' if: + - contact_frequency_days is set + - last_contacted_at is NULL or older than contact_frequency_days ago + + Args: + limit (int | Unset): Default: 20. + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + ContactsPublic | HTTPValidationError + """ + + + return sync_detailed( + client=client, +limit=limit, + + ).parsed + +async def asyncio_detailed( + *, + client: AuthenticatedClient, + limit: int | Unset = 20, + +) -> Response[ContactsPublic | HTTPValidationError]: + """ List Losing Touch + + Return contacts whose cadence has been exceeded. + + A contact is 'losing touch' if: + - contact_frequency_days is set + - last_contacted_at is NULL or older than contact_frequency_days ago + + Args: + limit (int | Unset): Default: 20. + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[ContactsPublic | HTTPValidationError] + """ + + + kwargs = _get_kwargs( + limit=limit, + + ) + + response = await client.get_async_httpx_client().request( + **kwargs + ) + + return _build_response(client=client, response=response) + +async def asyncio( + *, + client: AuthenticatedClient, + limit: int | Unset = 20, + +) -> ContactsPublic | HTTPValidationError | None: + """ List Losing Touch + + Return contacts whose cadence has been exceeded. + + A contact is 'losing touch' if: + - contact_frequency_days is set + - last_contacted_at is NULL or older than contact_frequency_days ago + + Args: + limit (int | Unset): Default: 20. + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + ContactsPublic | HTTPValidationError + """ + + + return (await asyncio_detailed( + client=client, +limit=limit, + + )).parsed diff --git a/kindred-sdk/personal_crm_client/api/contacts/contacts_restore_contact.py b/kindred-sdk/personal_crm_client/api/contacts/contacts_restore_contact.py new file mode 100644 index 00000000..afd1950d --- /dev/null +++ b/kindred-sdk/personal_crm_client/api/contacts/contacts_restore_contact.py @@ -0,0 +1,188 @@ +from http import HTTPStatus +from typing import Any, cast +from urllib.parse import quote + +import httpx + +from ...client import AuthenticatedClient, Client +from ...types import Response, UNSET +from ... import errors + +from ...models.contact_public import ContactPublic +from ...models.http_validation_error import HTTPValidationError +from typing import cast +from uuid import UUID + + + +def _get_kwargs( + contact_id: UUID, + +) -> dict[str, Any]: + + + + + + + _kwargs: dict[str, Any] = { + "method": "post", + "url": "/api/v1/contacts/{contact_id}/restore".format(contact_id=quote(str(contact_id), safe=""),), + } + + + return _kwargs + + + +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> ContactPublic | HTTPValidationError | None: + if response.status_code == 200: + response_200 = ContactPublic.from_dict(response.json()) + + + + return response_200 + + if response.status_code == 422: + response_422 = HTTPValidationError.from_dict(response.json()) + + + + return response_422 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[ContactPublic | HTTPValidationError]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + contact_id: UUID, + *, + client: AuthenticatedClient, + +) -> Response[ContactPublic | HTTPValidationError]: + """ Restore Contact + + Restore a soft-deleted contact (clear ``deleted_at``). + + Args: + contact_id (UUID): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[ContactPublic | HTTPValidationError] + """ + + + kwargs = _get_kwargs( + contact_id=contact_id, + + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + +def sync( + contact_id: UUID, + *, + client: AuthenticatedClient, + +) -> ContactPublic | HTTPValidationError | None: + """ Restore Contact + + Restore a soft-deleted contact (clear ``deleted_at``). + + Args: + contact_id (UUID): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + ContactPublic | HTTPValidationError + """ + + + return sync_detailed( + contact_id=contact_id, +client=client, + + ).parsed + +async def asyncio_detailed( + contact_id: UUID, + *, + client: AuthenticatedClient, + +) -> Response[ContactPublic | HTTPValidationError]: + """ Restore Contact + + Restore a soft-deleted contact (clear ``deleted_at``). + + Args: + contact_id (UUID): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[ContactPublic | HTTPValidationError] + """ + + + kwargs = _get_kwargs( + contact_id=contact_id, + + ) + + response = await client.get_async_httpx_client().request( + **kwargs + ) + + return _build_response(client=client, response=response) + +async def asyncio( + contact_id: UUID, + *, + client: AuthenticatedClient, + +) -> ContactPublic | HTTPValidationError | None: + """ Restore Contact + + Restore a soft-deleted contact (clear ``deleted_at``). + + Args: + contact_id (UUID): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + ContactPublic | HTTPValidationError + """ + + + return (await asyncio_detailed( + contact_id=contact_id, +client=client, + + )).parsed diff --git a/kindred-sdk/personal_crm_client/api/contacts/contacts_update_contact.py b/kindred-sdk/personal_crm_client/api/contacts/contacts_update_contact.py new file mode 100644 index 00000000..b8f86eb7 --- /dev/null +++ b/kindred-sdk/personal_crm_client/api/contacts/contacts_update_contact.py @@ -0,0 +1,209 @@ +from http import HTTPStatus +from typing import Any, cast +from urllib.parse import quote + +import httpx + +from ...client import AuthenticatedClient, Client +from ...types import Response, UNSET +from ... import errors + +from ...models.contact_public import ContactPublic +from ...models.contact_update import ContactUpdate +from ...models.http_validation_error import HTTPValidationError +from typing import cast +from uuid import UUID + + + +def _get_kwargs( + contact_id: UUID, + *, + body: ContactUpdate, + +) -> dict[str, Any]: + headers: dict[str, Any] = {} + + + + + + + _kwargs: dict[str, Any] = { + "method": "patch", + "url": "/api/v1/contacts/{contact_id}".format(contact_id=quote(str(contact_id), safe=""),), + } + + _kwargs["json"] = body.to_dict() + + + headers["Content-Type"] = "application/json" + + _kwargs["headers"] = headers + return _kwargs + + + +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> ContactPublic | HTTPValidationError | None: + if response.status_code == 200: + response_200 = ContactPublic.from_dict(response.json()) + + + + return response_200 + + if response.status_code == 422: + response_422 = HTTPValidationError.from_dict(response.json()) + + + + return response_422 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[ContactPublic | HTTPValidationError]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + contact_id: UUID, + *, + client: AuthenticatedClient, + body: ContactUpdate, + +) -> Response[ContactPublic | HTTPValidationError]: + """ Update Contact + + Update a contact. + + Args: + contact_id (UUID): + body (ContactUpdate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[ContactPublic | HTTPValidationError] + """ + + + kwargs = _get_kwargs( + contact_id=contact_id, +body=body, + + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + +def sync( + contact_id: UUID, + *, + client: AuthenticatedClient, + body: ContactUpdate, + +) -> ContactPublic | HTTPValidationError | None: + """ Update Contact + + Update a contact. + + Args: + contact_id (UUID): + body (ContactUpdate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + ContactPublic | HTTPValidationError + """ + + + return sync_detailed( + contact_id=contact_id, +client=client, +body=body, + + ).parsed + +async def asyncio_detailed( + contact_id: UUID, + *, + client: AuthenticatedClient, + body: ContactUpdate, + +) -> Response[ContactPublic | HTTPValidationError]: + """ Update Contact + + Update a contact. + + Args: + contact_id (UUID): + body (ContactUpdate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[ContactPublic | HTTPValidationError] + """ + + + kwargs = _get_kwargs( + contact_id=contact_id, +body=body, + + ) + + response = await client.get_async_httpx_client().request( + **kwargs + ) + + return _build_response(client=client, response=response) + +async def asyncio( + contact_id: UUID, + *, + client: AuthenticatedClient, + body: ContactUpdate, + +) -> ContactPublic | HTTPValidationError | None: + """ Update Contact + + Update a contact. + + Args: + contact_id (UUID): + body (ContactUpdate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + ContactPublic | HTTPValidationError + """ + + + return (await asyncio_detailed( + contact_id=contact_id, +client=client, +body=body, + + )).parsed diff --git a/kindred-sdk/personal_crm_client/api/custom_fields/__init__.py b/kindred-sdk/personal_crm_client/api/custom_fields/__init__.py new file mode 100644 index 00000000..c9921b5f --- /dev/null +++ b/kindred-sdk/personal_crm_client/api/custom_fields/__init__.py @@ -0,0 +1 @@ +""" Contains endpoint functions for accessing the API """ diff --git a/kindred-sdk/personal_crm_client/api/custom_fields/custom_fields_create_field_definition.py b/kindred-sdk/personal_crm_client/api/custom_fields/custom_fields_create_field_definition.py new file mode 100644 index 00000000..e0226a05 --- /dev/null +++ b/kindred-sdk/personal_crm_client/api/custom_fields/custom_fields_create_field_definition.py @@ -0,0 +1,195 @@ +from http import HTTPStatus +from typing import Any, cast +from urllib.parse import quote + +import httpx + +from ...client import AuthenticatedClient, Client +from ...types import Response, UNSET +from ... import errors + +from ...models.custom_field_definition_create import CustomFieldDefinitionCreate +from ...models.custom_field_definition_public import CustomFieldDefinitionPublic +from ...models.http_validation_error import HTTPValidationError +from typing import cast + + + +def _get_kwargs( + *, + body: CustomFieldDefinitionCreate, + +) -> dict[str, Any]: + headers: dict[str, Any] = {} + + + + + + + _kwargs: dict[str, Any] = { + "method": "post", + "url": "/api/v1/custom-fields/definitions/", + } + + _kwargs["json"] = body.to_dict() + + + headers["Content-Type"] = "application/json" + + _kwargs["headers"] = headers + return _kwargs + + + +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> CustomFieldDefinitionPublic | HTTPValidationError | None: + if response.status_code == 200: + response_200 = CustomFieldDefinitionPublic.from_dict(response.json()) + + + + return response_200 + + if response.status_code == 422: + response_422 = HTTPValidationError.from_dict(response.json()) + + + + return response_422 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[CustomFieldDefinitionPublic | HTTPValidationError]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + *, + client: AuthenticatedClient, + body: CustomFieldDefinitionCreate, + +) -> Response[CustomFieldDefinitionPublic | HTTPValidationError]: + """ Create Field Definition + + Create a new custom field definition. + + Args: + body (CustomFieldDefinitionCreate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[CustomFieldDefinitionPublic | HTTPValidationError] + """ + + + kwargs = _get_kwargs( + body=body, + + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + +def sync( + *, + client: AuthenticatedClient, + body: CustomFieldDefinitionCreate, + +) -> CustomFieldDefinitionPublic | HTTPValidationError | None: + """ Create Field Definition + + Create a new custom field definition. + + Args: + body (CustomFieldDefinitionCreate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + CustomFieldDefinitionPublic | HTTPValidationError + """ + + + return sync_detailed( + client=client, +body=body, + + ).parsed + +async def asyncio_detailed( + *, + client: AuthenticatedClient, + body: CustomFieldDefinitionCreate, + +) -> Response[CustomFieldDefinitionPublic | HTTPValidationError]: + """ Create Field Definition + + Create a new custom field definition. + + Args: + body (CustomFieldDefinitionCreate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[CustomFieldDefinitionPublic | HTTPValidationError] + """ + + + kwargs = _get_kwargs( + body=body, + + ) + + response = await client.get_async_httpx_client().request( + **kwargs + ) + + return _build_response(client=client, response=response) + +async def asyncio( + *, + client: AuthenticatedClient, + body: CustomFieldDefinitionCreate, + +) -> CustomFieldDefinitionPublic | HTTPValidationError | None: + """ Create Field Definition + + Create a new custom field definition. + + Args: + body (CustomFieldDefinitionCreate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + CustomFieldDefinitionPublic | HTTPValidationError + """ + + + return (await asyncio_detailed( + client=client, +body=body, + + )).parsed diff --git a/kindred-sdk/personal_crm_client/api/custom_fields/custom_fields_create_field_value.py b/kindred-sdk/personal_crm_client/api/custom_fields/custom_fields_create_field_value.py new file mode 100644 index 00000000..7cc14eb3 --- /dev/null +++ b/kindred-sdk/personal_crm_client/api/custom_fields/custom_fields_create_field_value.py @@ -0,0 +1,195 @@ +from http import HTTPStatus +from typing import Any, cast +from urllib.parse import quote + +import httpx + +from ...client import AuthenticatedClient, Client +from ...types import Response, UNSET +from ... import errors + +from ...models.custom_field_value_create import CustomFieldValueCreate +from ...models.custom_field_value_public import CustomFieldValuePublic +from ...models.http_validation_error import HTTPValidationError +from typing import cast + + + +def _get_kwargs( + *, + body: CustomFieldValueCreate, + +) -> dict[str, Any]: + headers: dict[str, Any] = {} + + + + + + + _kwargs: dict[str, Any] = { + "method": "post", + "url": "/api/v1/custom-fields/values/", + } + + _kwargs["json"] = body.to_dict() + + + headers["Content-Type"] = "application/json" + + _kwargs["headers"] = headers + return _kwargs + + + +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> CustomFieldValuePublic | HTTPValidationError | None: + if response.status_code == 200: + response_200 = CustomFieldValuePublic.from_dict(response.json()) + + + + return response_200 + + if response.status_code == 422: + response_422 = HTTPValidationError.from_dict(response.json()) + + + + return response_422 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[CustomFieldValuePublic | HTTPValidationError]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + *, + client: AuthenticatedClient, + body: CustomFieldValueCreate, + +) -> Response[CustomFieldValuePublic | HTTPValidationError]: + """ Create Field Value + + Create a custom field value for a contact. + + Args: + body (CustomFieldValueCreate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[CustomFieldValuePublic | HTTPValidationError] + """ + + + kwargs = _get_kwargs( + body=body, + + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + +def sync( + *, + client: AuthenticatedClient, + body: CustomFieldValueCreate, + +) -> CustomFieldValuePublic | HTTPValidationError | None: + """ Create Field Value + + Create a custom field value for a contact. + + Args: + body (CustomFieldValueCreate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + CustomFieldValuePublic | HTTPValidationError + """ + + + return sync_detailed( + client=client, +body=body, + + ).parsed + +async def asyncio_detailed( + *, + client: AuthenticatedClient, + body: CustomFieldValueCreate, + +) -> Response[CustomFieldValuePublic | HTTPValidationError]: + """ Create Field Value + + Create a custom field value for a contact. + + Args: + body (CustomFieldValueCreate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[CustomFieldValuePublic | HTTPValidationError] + """ + + + kwargs = _get_kwargs( + body=body, + + ) + + response = await client.get_async_httpx_client().request( + **kwargs + ) + + return _build_response(client=client, response=response) + +async def asyncio( + *, + client: AuthenticatedClient, + body: CustomFieldValueCreate, + +) -> CustomFieldValuePublic | HTTPValidationError | None: + """ Create Field Value + + Create a custom field value for a contact. + + Args: + body (CustomFieldValueCreate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + CustomFieldValuePublic | HTTPValidationError + """ + + + return (await asyncio_detailed( + client=client, +body=body, + + )).parsed diff --git a/kindred-sdk/personal_crm_client/api/custom_fields/custom_fields_delete_field_definition.py b/kindred-sdk/personal_crm_client/api/custom_fields/custom_fields_delete_field_definition.py new file mode 100644 index 00000000..257f3091 --- /dev/null +++ b/kindred-sdk/personal_crm_client/api/custom_fields/custom_fields_delete_field_definition.py @@ -0,0 +1,184 @@ +from http import HTTPStatus +from typing import Any, cast +from urllib.parse import quote + +import httpx + +from ...client import AuthenticatedClient, Client +from ...types import Response, UNSET +from ... import errors + +from ...models.http_validation_error import HTTPValidationError +from typing import cast +from uuid import UUID + + + +def _get_kwargs( + def_id: UUID, + +) -> dict[str, Any]: + + + + + + + _kwargs: dict[str, Any] = { + "method": "delete", + "url": "/api/v1/custom-fields/definitions/{def_id}".format(def_id=quote(str(def_id), safe=""),), + } + + + return _kwargs + + + +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Any | HTTPValidationError | None: + if response.status_code == 200: + response_200 = response.json() + return response_200 + + if response.status_code == 422: + response_422 = HTTPValidationError.from_dict(response.json()) + + + + return response_422 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[Any | HTTPValidationError]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + def_id: UUID, + *, + client: AuthenticatedClient, + +) -> Response[Any | HTTPValidationError]: + """ Delete Field Definition + + Delete a custom field definition. + + Args: + def_id (UUID): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Any | HTTPValidationError] + """ + + + kwargs = _get_kwargs( + def_id=def_id, + + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + +def sync( + def_id: UUID, + *, + client: AuthenticatedClient, + +) -> Any | HTTPValidationError | None: + """ Delete Field Definition + + Delete a custom field definition. + + Args: + def_id (UUID): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Any | HTTPValidationError + """ + + + return sync_detailed( + def_id=def_id, +client=client, + + ).parsed + +async def asyncio_detailed( + def_id: UUID, + *, + client: AuthenticatedClient, + +) -> Response[Any | HTTPValidationError]: + """ Delete Field Definition + + Delete a custom field definition. + + Args: + def_id (UUID): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Any | HTTPValidationError] + """ + + + kwargs = _get_kwargs( + def_id=def_id, + + ) + + response = await client.get_async_httpx_client().request( + **kwargs + ) + + return _build_response(client=client, response=response) + +async def asyncio( + def_id: UUID, + *, + client: AuthenticatedClient, + +) -> Any | HTTPValidationError | None: + """ Delete Field Definition + + Delete a custom field definition. + + Args: + def_id (UUID): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Any | HTTPValidationError + """ + + + return (await asyncio_detailed( + def_id=def_id, +client=client, + + )).parsed diff --git a/kindred-sdk/personal_crm_client/api/custom_fields/custom_fields_delete_field_value.py b/kindred-sdk/personal_crm_client/api/custom_fields/custom_fields_delete_field_value.py new file mode 100644 index 00000000..118afbb6 --- /dev/null +++ b/kindred-sdk/personal_crm_client/api/custom_fields/custom_fields_delete_field_value.py @@ -0,0 +1,184 @@ +from http import HTTPStatus +from typing import Any, cast +from urllib.parse import quote + +import httpx + +from ...client import AuthenticatedClient, Client +from ...types import Response, UNSET +from ... import errors + +from ...models.http_validation_error import HTTPValidationError +from typing import cast +from uuid import UUID + + + +def _get_kwargs( + value_id: UUID, + +) -> dict[str, Any]: + + + + + + + _kwargs: dict[str, Any] = { + "method": "delete", + "url": "/api/v1/custom-fields/values/{value_id}".format(value_id=quote(str(value_id), safe=""),), + } + + + return _kwargs + + + +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Any | HTTPValidationError | None: + if response.status_code == 200: + response_200 = response.json() + return response_200 + + if response.status_code == 422: + response_422 = HTTPValidationError.from_dict(response.json()) + + + + return response_422 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[Any | HTTPValidationError]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + value_id: UUID, + *, + client: AuthenticatedClient, + +) -> Response[Any | HTTPValidationError]: + """ Delete Field Value + + Delete a custom field value. + + Args: + value_id (UUID): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Any | HTTPValidationError] + """ + + + kwargs = _get_kwargs( + value_id=value_id, + + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + +def sync( + value_id: UUID, + *, + client: AuthenticatedClient, + +) -> Any | HTTPValidationError | None: + """ Delete Field Value + + Delete a custom field value. + + Args: + value_id (UUID): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Any | HTTPValidationError + """ + + + return sync_detailed( + value_id=value_id, +client=client, + + ).parsed + +async def asyncio_detailed( + value_id: UUID, + *, + client: AuthenticatedClient, + +) -> Response[Any | HTTPValidationError]: + """ Delete Field Value + + Delete a custom field value. + + Args: + value_id (UUID): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Any | HTTPValidationError] + """ + + + kwargs = _get_kwargs( + value_id=value_id, + + ) + + response = await client.get_async_httpx_client().request( + **kwargs + ) + + return _build_response(client=client, response=response) + +async def asyncio( + value_id: UUID, + *, + client: AuthenticatedClient, + +) -> Any | HTTPValidationError | None: + """ Delete Field Value + + Delete a custom field value. + + Args: + value_id (UUID): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Any | HTTPValidationError + """ + + + return (await asyncio_detailed( + value_id=value_id, +client=client, + + )).parsed diff --git a/kindred-sdk/personal_crm_client/api/custom_fields/custom_fields_list_field_definitions.py b/kindred-sdk/personal_crm_client/api/custom_fields/custom_fields_list_field_definitions.py new file mode 100644 index 00000000..5bf966d9 --- /dev/null +++ b/kindred-sdk/personal_crm_client/api/custom_fields/custom_fields_list_field_definitions.py @@ -0,0 +1,108 @@ +from http import HTTPStatus +from typing import Any, cast +from urllib.parse import quote + +import httpx + +from ...client import AuthenticatedClient, Client +from ...types import Response, UNSET +from ... import errors + + + + +def _get_kwargs( + +) -> dict[str, Any]: + + + + + + + _kwargs: dict[str, Any] = { + "method": "get", + "url": "/api/v1/custom-fields/definitions/", + } + + + return _kwargs + + + +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Any | None: + if response.status_code == 200: + return None + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[Any]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + *, + client: AuthenticatedClient, + +) -> Response[Any]: + """ List Field Definitions + + List all custom field definitions for the user. + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Any] + """ + + + kwargs = _get_kwargs( + + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + + +async def asyncio_detailed( + *, + client: AuthenticatedClient, + +) -> Response[Any]: + """ List Field Definitions + + List all custom field definitions for the user. + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Any] + """ + + + kwargs = _get_kwargs( + + ) + + response = await client.get_async_httpx_client().request( + **kwargs + ) + + return _build_response(client=client, response=response) + diff --git a/kindred-sdk/personal_crm_client/api/custom_fields/custom_fields_list_field_values.py b/kindred-sdk/personal_crm_client/api/custom_fields/custom_fields_list_field_values.py new file mode 100644 index 00000000..897e5ee8 --- /dev/null +++ b/kindred-sdk/personal_crm_client/api/custom_fields/custom_fields_list_field_values.py @@ -0,0 +1,184 @@ +from http import HTTPStatus +from typing import Any, cast +from urllib.parse import quote + +import httpx + +from ...client import AuthenticatedClient, Client +from ...types import Response, UNSET +from ... import errors + +from ...models.http_validation_error import HTTPValidationError +from typing import cast +from uuid import UUID + + + +def _get_kwargs( + contact_id: UUID, + +) -> dict[str, Any]: + + + + + + + _kwargs: dict[str, Any] = { + "method": "get", + "url": "/api/v1/custom-fields/values/contact/{contact_id}".format(contact_id=quote(str(contact_id), safe=""),), + } + + + return _kwargs + + + +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Any | HTTPValidationError | None: + if response.status_code == 200: + response_200 = response.json() + return response_200 + + if response.status_code == 422: + response_422 = HTTPValidationError.from_dict(response.json()) + + + + return response_422 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[Any | HTTPValidationError]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + contact_id: UUID, + *, + client: AuthenticatedClient, + +) -> Response[Any | HTTPValidationError]: + """ List Field Values + + List custom field values for a contact. + + Args: + contact_id (UUID): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Any | HTTPValidationError] + """ + + + kwargs = _get_kwargs( + contact_id=contact_id, + + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + +def sync( + contact_id: UUID, + *, + client: AuthenticatedClient, + +) -> Any | HTTPValidationError | None: + """ List Field Values + + List custom field values for a contact. + + Args: + contact_id (UUID): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Any | HTTPValidationError + """ + + + return sync_detailed( + contact_id=contact_id, +client=client, + + ).parsed + +async def asyncio_detailed( + contact_id: UUID, + *, + client: AuthenticatedClient, + +) -> Response[Any | HTTPValidationError]: + """ List Field Values + + List custom field values for a contact. + + Args: + contact_id (UUID): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Any | HTTPValidationError] + """ + + + kwargs = _get_kwargs( + contact_id=contact_id, + + ) + + response = await client.get_async_httpx_client().request( + **kwargs + ) + + return _build_response(client=client, response=response) + +async def asyncio( + contact_id: UUID, + *, + client: AuthenticatedClient, + +) -> Any | HTTPValidationError | None: + """ List Field Values + + List custom field values for a contact. + + Args: + contact_id (UUID): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Any | HTTPValidationError + """ + + + return (await asyncio_detailed( + contact_id=contact_id, +client=client, + + )).parsed diff --git a/kindred-sdk/personal_crm_client/api/custom_fields/custom_fields_update_field_definition.py b/kindred-sdk/personal_crm_client/api/custom_fields/custom_fields_update_field_definition.py new file mode 100644 index 00000000..acd2b0a0 --- /dev/null +++ b/kindred-sdk/personal_crm_client/api/custom_fields/custom_fields_update_field_definition.py @@ -0,0 +1,209 @@ +from http import HTTPStatus +from typing import Any, cast +from urllib.parse import quote + +import httpx + +from ...client import AuthenticatedClient, Client +from ...types import Response, UNSET +from ... import errors + +from ...models.custom_field_definition_public import CustomFieldDefinitionPublic +from ...models.custom_field_definition_update import CustomFieldDefinitionUpdate +from ...models.http_validation_error import HTTPValidationError +from typing import cast +from uuid import UUID + + + +def _get_kwargs( + def_id: UUID, + *, + body: CustomFieldDefinitionUpdate, + +) -> dict[str, Any]: + headers: dict[str, Any] = {} + + + + + + + _kwargs: dict[str, Any] = { + "method": "patch", + "url": "/api/v1/custom-fields/definitions/{def_id}".format(def_id=quote(str(def_id), safe=""),), + } + + _kwargs["json"] = body.to_dict() + + + headers["Content-Type"] = "application/json" + + _kwargs["headers"] = headers + return _kwargs + + + +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> CustomFieldDefinitionPublic | HTTPValidationError | None: + if response.status_code == 200: + response_200 = CustomFieldDefinitionPublic.from_dict(response.json()) + + + + return response_200 + + if response.status_code == 422: + response_422 = HTTPValidationError.from_dict(response.json()) + + + + return response_422 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[CustomFieldDefinitionPublic | HTTPValidationError]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + def_id: UUID, + *, + client: AuthenticatedClient, + body: CustomFieldDefinitionUpdate, + +) -> Response[CustomFieldDefinitionPublic | HTTPValidationError]: + """ Update Field Definition + + Update a custom field definition. + + Args: + def_id (UUID): + body (CustomFieldDefinitionUpdate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[CustomFieldDefinitionPublic | HTTPValidationError] + """ + + + kwargs = _get_kwargs( + def_id=def_id, +body=body, + + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + +def sync( + def_id: UUID, + *, + client: AuthenticatedClient, + body: CustomFieldDefinitionUpdate, + +) -> CustomFieldDefinitionPublic | HTTPValidationError | None: + """ Update Field Definition + + Update a custom field definition. + + Args: + def_id (UUID): + body (CustomFieldDefinitionUpdate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + CustomFieldDefinitionPublic | HTTPValidationError + """ + + + return sync_detailed( + def_id=def_id, +client=client, +body=body, + + ).parsed + +async def asyncio_detailed( + def_id: UUID, + *, + client: AuthenticatedClient, + body: CustomFieldDefinitionUpdate, + +) -> Response[CustomFieldDefinitionPublic | HTTPValidationError]: + """ Update Field Definition + + Update a custom field definition. + + Args: + def_id (UUID): + body (CustomFieldDefinitionUpdate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[CustomFieldDefinitionPublic | HTTPValidationError] + """ + + + kwargs = _get_kwargs( + def_id=def_id, +body=body, + + ) + + response = await client.get_async_httpx_client().request( + **kwargs + ) + + return _build_response(client=client, response=response) + +async def asyncio( + def_id: UUID, + *, + client: AuthenticatedClient, + body: CustomFieldDefinitionUpdate, + +) -> CustomFieldDefinitionPublic | HTTPValidationError | None: + """ Update Field Definition + + Update a custom field definition. + + Args: + def_id (UUID): + body (CustomFieldDefinitionUpdate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + CustomFieldDefinitionPublic | HTTPValidationError + """ + + + return (await asyncio_detailed( + def_id=def_id, +client=client, +body=body, + + )).parsed diff --git a/kindred-sdk/personal_crm_client/api/custom_fields/custom_fields_update_field_value.py b/kindred-sdk/personal_crm_client/api/custom_fields/custom_fields_update_field_value.py new file mode 100644 index 00000000..e2303caa --- /dev/null +++ b/kindred-sdk/personal_crm_client/api/custom_fields/custom_fields_update_field_value.py @@ -0,0 +1,209 @@ +from http import HTTPStatus +from typing import Any, cast +from urllib.parse import quote + +import httpx + +from ...client import AuthenticatedClient, Client +from ...types import Response, UNSET +from ... import errors + +from ...models.custom_field_value_public import CustomFieldValuePublic +from ...models.custom_field_value_update import CustomFieldValueUpdate +from ...models.http_validation_error import HTTPValidationError +from typing import cast +from uuid import UUID + + + +def _get_kwargs( + value_id: UUID, + *, + body: CustomFieldValueUpdate, + +) -> dict[str, Any]: + headers: dict[str, Any] = {} + + + + + + + _kwargs: dict[str, Any] = { + "method": "patch", + "url": "/api/v1/custom-fields/values/{value_id}".format(value_id=quote(str(value_id), safe=""),), + } + + _kwargs["json"] = body.to_dict() + + + headers["Content-Type"] = "application/json" + + _kwargs["headers"] = headers + return _kwargs + + + +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> CustomFieldValuePublic | HTTPValidationError | None: + if response.status_code == 200: + response_200 = CustomFieldValuePublic.from_dict(response.json()) + + + + return response_200 + + if response.status_code == 422: + response_422 = HTTPValidationError.from_dict(response.json()) + + + + return response_422 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[CustomFieldValuePublic | HTTPValidationError]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + value_id: UUID, + *, + client: AuthenticatedClient, + body: CustomFieldValueUpdate, + +) -> Response[CustomFieldValuePublic | HTTPValidationError]: + """ Update Field Value + + Update a custom field value. + + Args: + value_id (UUID): + body (CustomFieldValueUpdate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[CustomFieldValuePublic | HTTPValidationError] + """ + + + kwargs = _get_kwargs( + value_id=value_id, +body=body, + + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + +def sync( + value_id: UUID, + *, + client: AuthenticatedClient, + body: CustomFieldValueUpdate, + +) -> CustomFieldValuePublic | HTTPValidationError | None: + """ Update Field Value + + Update a custom field value. + + Args: + value_id (UUID): + body (CustomFieldValueUpdate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + CustomFieldValuePublic | HTTPValidationError + """ + + + return sync_detailed( + value_id=value_id, +client=client, +body=body, + + ).parsed + +async def asyncio_detailed( + value_id: UUID, + *, + client: AuthenticatedClient, + body: CustomFieldValueUpdate, + +) -> Response[CustomFieldValuePublic | HTTPValidationError]: + """ Update Field Value + + Update a custom field value. + + Args: + value_id (UUID): + body (CustomFieldValueUpdate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[CustomFieldValuePublic | HTTPValidationError] + """ + + + kwargs = _get_kwargs( + value_id=value_id, +body=body, + + ) + + response = await client.get_async_httpx_client().request( + **kwargs + ) + + return _build_response(client=client, response=response) + +async def asyncio( + value_id: UUID, + *, + client: AuthenticatedClient, + body: CustomFieldValueUpdate, + +) -> CustomFieldValuePublic | HTTPValidationError | None: + """ Update Field Value + + Update a custom field value. + + Args: + value_id (UUID): + body (CustomFieldValueUpdate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + CustomFieldValuePublic | HTTPValidationError + """ + + + return (await asyncio_detailed( + value_id=value_id, +client=client, +body=body, + + )).parsed diff --git a/kindred-sdk/personal_crm_client/api/debts/__init__.py b/kindred-sdk/personal_crm_client/api/debts/__init__.py new file mode 100644 index 00000000..c9921b5f --- /dev/null +++ b/kindred-sdk/personal_crm_client/api/debts/__init__.py @@ -0,0 +1 @@ +""" Contains endpoint functions for accessing the API """ diff --git a/kindred-sdk/personal_crm_client/api/debts/debts_create_debt_route.py b/kindred-sdk/personal_crm_client/api/debts/debts_create_debt_route.py new file mode 100644 index 00000000..8df101dd --- /dev/null +++ b/kindred-sdk/personal_crm_client/api/debts/debts_create_debt_route.py @@ -0,0 +1,195 @@ +from http import HTTPStatus +from typing import Any, cast +from urllib.parse import quote + +import httpx + +from ...client import AuthenticatedClient, Client +from ...types import Response, UNSET +from ... import errors + +from ...models.debt_create import DebtCreate +from ...models.debt_public import DebtPublic +from ...models.http_validation_error import HTTPValidationError +from typing import cast + + + +def _get_kwargs( + *, + body: DebtCreate, + +) -> dict[str, Any]: + headers: dict[str, Any] = {} + + + + + + + _kwargs: dict[str, Any] = { + "method": "post", + "url": "/api/v1/debts/", + } + + _kwargs["json"] = body.to_dict() + + + headers["Content-Type"] = "application/json" + + _kwargs["headers"] = headers + return _kwargs + + + +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> DebtPublic | HTTPValidationError | None: + if response.status_code == 200: + response_200 = DebtPublic.from_dict(response.json()) + + + + return response_200 + + if response.status_code == 422: + response_422 = HTTPValidationError.from_dict(response.json()) + + + + return response_422 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[DebtPublic | HTTPValidationError]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + *, + client: AuthenticatedClient, + body: DebtCreate, + +) -> Response[DebtPublic | HTTPValidationError]: + """ Create Debt Route + + Create a new debt. + + Args: + body (DebtCreate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[DebtPublic | HTTPValidationError] + """ + + + kwargs = _get_kwargs( + body=body, + + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + +def sync( + *, + client: AuthenticatedClient, + body: DebtCreate, + +) -> DebtPublic | HTTPValidationError | None: + """ Create Debt Route + + Create a new debt. + + Args: + body (DebtCreate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + DebtPublic | HTTPValidationError + """ + + + return sync_detailed( + client=client, +body=body, + + ).parsed + +async def asyncio_detailed( + *, + client: AuthenticatedClient, + body: DebtCreate, + +) -> Response[DebtPublic | HTTPValidationError]: + """ Create Debt Route + + Create a new debt. + + Args: + body (DebtCreate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[DebtPublic | HTTPValidationError] + """ + + + kwargs = _get_kwargs( + body=body, + + ) + + response = await client.get_async_httpx_client().request( + **kwargs + ) + + return _build_response(client=client, response=response) + +async def asyncio( + *, + client: AuthenticatedClient, + body: DebtCreate, + +) -> DebtPublic | HTTPValidationError | None: + """ Create Debt Route + + Create a new debt. + + Args: + body (DebtCreate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + DebtPublic | HTTPValidationError + """ + + + return (await asyncio_detailed( + client=client, +body=body, + + )).parsed diff --git a/kindred-sdk/personal_crm_client/api/debts/debts_delete_debt.py b/kindred-sdk/personal_crm_client/api/debts/debts_delete_debt.py new file mode 100644 index 00000000..1351f101 --- /dev/null +++ b/kindred-sdk/personal_crm_client/api/debts/debts_delete_debt.py @@ -0,0 +1,184 @@ +from http import HTTPStatus +from typing import Any, cast +from urllib.parse import quote + +import httpx + +from ...client import AuthenticatedClient, Client +from ...types import Response, UNSET +from ... import errors + +from ...models.http_validation_error import HTTPValidationError +from typing import cast +from uuid import UUID + + + +def _get_kwargs( + debt_id: UUID, + +) -> dict[str, Any]: + + + + + + + _kwargs: dict[str, Any] = { + "method": "delete", + "url": "/api/v1/debts/{debt_id}".format(debt_id=quote(str(debt_id), safe=""),), + } + + + return _kwargs + + + +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Any | HTTPValidationError | None: + if response.status_code == 200: + response_200 = response.json() + return response_200 + + if response.status_code == 422: + response_422 = HTTPValidationError.from_dict(response.json()) + + + + return response_422 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[Any | HTTPValidationError]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + debt_id: UUID, + *, + client: AuthenticatedClient, + +) -> Response[Any | HTTPValidationError]: + """ Delete Debt + + Delete a debt. + + Args: + debt_id (UUID): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Any | HTTPValidationError] + """ + + + kwargs = _get_kwargs( + debt_id=debt_id, + + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + +def sync( + debt_id: UUID, + *, + client: AuthenticatedClient, + +) -> Any | HTTPValidationError | None: + """ Delete Debt + + Delete a debt. + + Args: + debt_id (UUID): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Any | HTTPValidationError + """ + + + return sync_detailed( + debt_id=debt_id, +client=client, + + ).parsed + +async def asyncio_detailed( + debt_id: UUID, + *, + client: AuthenticatedClient, + +) -> Response[Any | HTTPValidationError]: + """ Delete Debt + + Delete a debt. + + Args: + debt_id (UUID): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Any | HTTPValidationError] + """ + + + kwargs = _get_kwargs( + debt_id=debt_id, + + ) + + response = await client.get_async_httpx_client().request( + **kwargs + ) + + return _build_response(client=client, response=response) + +async def asyncio( + debt_id: UUID, + *, + client: AuthenticatedClient, + +) -> Any | HTTPValidationError | None: + """ Delete Debt + + Delete a debt. + + Args: + debt_id (UUID): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Any | HTTPValidationError + """ + + + return (await asyncio_detailed( + debt_id=debt_id, +client=client, + + )).parsed diff --git a/kindred-sdk/personal_crm_client/api/debts/debts_list_debts.py b/kindred-sdk/personal_crm_client/api/debts/debts_list_debts.py new file mode 100644 index 00000000..b6e6d620 --- /dev/null +++ b/kindred-sdk/personal_crm_client/api/debts/debts_list_debts.py @@ -0,0 +1,188 @@ +from http import HTTPStatus +from typing import Any, cast +from urllib.parse import quote + +import httpx + +from ...client import AuthenticatedClient, Client +from ...types import Response, UNSET +from ... import errors + +from ...models.debts_public import DebtsPublic +from ...models.http_validation_error import HTTPValidationError +from typing import cast +from uuid import UUID + + + +def _get_kwargs( + contact_id: UUID, + +) -> dict[str, Any]: + + + + + + + _kwargs: dict[str, Any] = { + "method": "get", + "url": "/api/v1/debts/contact/{contact_id}".format(contact_id=quote(str(contact_id), safe=""),), + } + + + return _kwargs + + + +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> DebtsPublic | HTTPValidationError | None: + if response.status_code == 200: + response_200 = DebtsPublic.from_dict(response.json()) + + + + return response_200 + + if response.status_code == 422: + response_422 = HTTPValidationError.from_dict(response.json()) + + + + return response_422 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[DebtsPublic | HTTPValidationError]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + contact_id: UUID, + *, + client: AuthenticatedClient, + +) -> Response[DebtsPublic | HTTPValidationError]: + """ List Debts + + List debts for a contact. + + Args: + contact_id (UUID): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[DebtsPublic | HTTPValidationError] + """ + + + kwargs = _get_kwargs( + contact_id=contact_id, + + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + +def sync( + contact_id: UUID, + *, + client: AuthenticatedClient, + +) -> DebtsPublic | HTTPValidationError | None: + """ List Debts + + List debts for a contact. + + Args: + contact_id (UUID): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + DebtsPublic | HTTPValidationError + """ + + + return sync_detailed( + contact_id=contact_id, +client=client, + + ).parsed + +async def asyncio_detailed( + contact_id: UUID, + *, + client: AuthenticatedClient, + +) -> Response[DebtsPublic | HTTPValidationError]: + """ List Debts + + List debts for a contact. + + Args: + contact_id (UUID): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[DebtsPublic | HTTPValidationError] + """ + + + kwargs = _get_kwargs( + contact_id=contact_id, + + ) + + response = await client.get_async_httpx_client().request( + **kwargs + ) + + return _build_response(client=client, response=response) + +async def asyncio( + contact_id: UUID, + *, + client: AuthenticatedClient, + +) -> DebtsPublic | HTTPValidationError | None: + """ List Debts + + List debts for a contact. + + Args: + contact_id (UUID): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + DebtsPublic | HTTPValidationError + """ + + + return (await asyncio_detailed( + contact_id=contact_id, +client=client, + + )).parsed diff --git a/kindred-sdk/personal_crm_client/api/debts/debts_update_debt.py b/kindred-sdk/personal_crm_client/api/debts/debts_update_debt.py new file mode 100644 index 00000000..80d6ac04 --- /dev/null +++ b/kindred-sdk/personal_crm_client/api/debts/debts_update_debt.py @@ -0,0 +1,209 @@ +from http import HTTPStatus +from typing import Any, cast +from urllib.parse import quote + +import httpx + +from ...client import AuthenticatedClient, Client +from ...types import Response, UNSET +from ... import errors + +from ...models.debt_public import DebtPublic +from ...models.debt_update import DebtUpdate +from ...models.http_validation_error import HTTPValidationError +from typing import cast +from uuid import UUID + + + +def _get_kwargs( + debt_id: UUID, + *, + body: DebtUpdate, + +) -> dict[str, Any]: + headers: dict[str, Any] = {} + + + + + + + _kwargs: dict[str, Any] = { + "method": "patch", + "url": "/api/v1/debts/{debt_id}".format(debt_id=quote(str(debt_id), safe=""),), + } + + _kwargs["json"] = body.to_dict() + + + headers["Content-Type"] = "application/json" + + _kwargs["headers"] = headers + return _kwargs + + + +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> DebtPublic | HTTPValidationError | None: + if response.status_code == 200: + response_200 = DebtPublic.from_dict(response.json()) + + + + return response_200 + + if response.status_code == 422: + response_422 = HTTPValidationError.from_dict(response.json()) + + + + return response_422 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[DebtPublic | HTTPValidationError]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + debt_id: UUID, + *, + client: AuthenticatedClient, + body: DebtUpdate, + +) -> Response[DebtPublic | HTTPValidationError]: + """ Update Debt + + Update a debt. + + Args: + debt_id (UUID): + body (DebtUpdate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[DebtPublic | HTTPValidationError] + """ + + + kwargs = _get_kwargs( + debt_id=debt_id, +body=body, + + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + +def sync( + debt_id: UUID, + *, + client: AuthenticatedClient, + body: DebtUpdate, + +) -> DebtPublic | HTTPValidationError | None: + """ Update Debt + + Update a debt. + + Args: + debt_id (UUID): + body (DebtUpdate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + DebtPublic | HTTPValidationError + """ + + + return sync_detailed( + debt_id=debt_id, +client=client, +body=body, + + ).parsed + +async def asyncio_detailed( + debt_id: UUID, + *, + client: AuthenticatedClient, + body: DebtUpdate, + +) -> Response[DebtPublic | HTTPValidationError]: + """ Update Debt + + Update a debt. + + Args: + debt_id (UUID): + body (DebtUpdate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[DebtPublic | HTTPValidationError] + """ + + + kwargs = _get_kwargs( + debt_id=debt_id, +body=body, + + ) + + response = await client.get_async_httpx_client().request( + **kwargs + ) + + return _build_response(client=client, response=response) + +async def asyncio( + debt_id: UUID, + *, + client: AuthenticatedClient, + body: DebtUpdate, + +) -> DebtPublic | HTTPValidationError | None: + """ Update Debt + + Update a debt. + + Args: + debt_id (UUID): + body (DebtUpdate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + DebtPublic | HTTPValidationError + """ + + + return (await asyncio_detailed( + debt_id=debt_id, +client=client, +body=body, + + )).parsed diff --git a/kindred-sdk/personal_crm_client/api/gifts/__init__.py b/kindred-sdk/personal_crm_client/api/gifts/__init__.py new file mode 100644 index 00000000..c9921b5f --- /dev/null +++ b/kindred-sdk/personal_crm_client/api/gifts/__init__.py @@ -0,0 +1 @@ +""" Contains endpoint functions for accessing the API """ diff --git a/kindred-sdk/personal_crm_client/api/gifts/gifts_create_gift_route.py b/kindred-sdk/personal_crm_client/api/gifts/gifts_create_gift_route.py new file mode 100644 index 00000000..bec67455 --- /dev/null +++ b/kindred-sdk/personal_crm_client/api/gifts/gifts_create_gift_route.py @@ -0,0 +1,195 @@ +from http import HTTPStatus +from typing import Any, cast +from urllib.parse import quote + +import httpx + +from ...client import AuthenticatedClient, Client +from ...types import Response, UNSET +from ... import errors + +from ...models.gift_create import GiftCreate +from ...models.gift_public import GiftPublic +from ...models.http_validation_error import HTTPValidationError +from typing import cast + + + +def _get_kwargs( + *, + body: GiftCreate, + +) -> dict[str, Any]: + headers: dict[str, Any] = {} + + + + + + + _kwargs: dict[str, Any] = { + "method": "post", + "url": "/api/v1/gifts/", + } + + _kwargs["json"] = body.to_dict() + + + headers["Content-Type"] = "application/json" + + _kwargs["headers"] = headers + return _kwargs + + + +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> GiftPublic | HTTPValidationError | None: + if response.status_code == 200: + response_200 = GiftPublic.from_dict(response.json()) + + + + return response_200 + + if response.status_code == 422: + response_422 = HTTPValidationError.from_dict(response.json()) + + + + return response_422 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[GiftPublic | HTTPValidationError]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + *, + client: AuthenticatedClient, + body: GiftCreate, + +) -> Response[GiftPublic | HTTPValidationError]: + """ Create Gift Route + + Create a new gift. + + Args: + body (GiftCreate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[GiftPublic | HTTPValidationError] + """ + + + kwargs = _get_kwargs( + body=body, + + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + +def sync( + *, + client: AuthenticatedClient, + body: GiftCreate, + +) -> GiftPublic | HTTPValidationError | None: + """ Create Gift Route + + Create a new gift. + + Args: + body (GiftCreate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + GiftPublic | HTTPValidationError + """ + + + return sync_detailed( + client=client, +body=body, + + ).parsed + +async def asyncio_detailed( + *, + client: AuthenticatedClient, + body: GiftCreate, + +) -> Response[GiftPublic | HTTPValidationError]: + """ Create Gift Route + + Create a new gift. + + Args: + body (GiftCreate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[GiftPublic | HTTPValidationError] + """ + + + kwargs = _get_kwargs( + body=body, + + ) + + response = await client.get_async_httpx_client().request( + **kwargs + ) + + return _build_response(client=client, response=response) + +async def asyncio( + *, + client: AuthenticatedClient, + body: GiftCreate, + +) -> GiftPublic | HTTPValidationError | None: + """ Create Gift Route + + Create a new gift. + + Args: + body (GiftCreate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + GiftPublic | HTTPValidationError + """ + + + return (await asyncio_detailed( + client=client, +body=body, + + )).parsed diff --git a/kindred-sdk/personal_crm_client/api/gifts/gifts_delete_gift.py b/kindred-sdk/personal_crm_client/api/gifts/gifts_delete_gift.py new file mode 100644 index 00000000..09895b53 --- /dev/null +++ b/kindred-sdk/personal_crm_client/api/gifts/gifts_delete_gift.py @@ -0,0 +1,184 @@ +from http import HTTPStatus +from typing import Any, cast +from urllib.parse import quote + +import httpx + +from ...client import AuthenticatedClient, Client +from ...types import Response, UNSET +from ... import errors + +from ...models.http_validation_error import HTTPValidationError +from typing import cast +from uuid import UUID + + + +def _get_kwargs( + gift_id: UUID, + +) -> dict[str, Any]: + + + + + + + _kwargs: dict[str, Any] = { + "method": "delete", + "url": "/api/v1/gifts/{gift_id}".format(gift_id=quote(str(gift_id), safe=""),), + } + + + return _kwargs + + + +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Any | HTTPValidationError | None: + if response.status_code == 200: + response_200 = response.json() + return response_200 + + if response.status_code == 422: + response_422 = HTTPValidationError.from_dict(response.json()) + + + + return response_422 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[Any | HTTPValidationError]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + gift_id: UUID, + *, + client: AuthenticatedClient, + +) -> Response[Any | HTTPValidationError]: + """ Delete Gift + + Delete a gift. + + Args: + gift_id (UUID): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Any | HTTPValidationError] + """ + + + kwargs = _get_kwargs( + gift_id=gift_id, + + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + +def sync( + gift_id: UUID, + *, + client: AuthenticatedClient, + +) -> Any | HTTPValidationError | None: + """ Delete Gift + + Delete a gift. + + Args: + gift_id (UUID): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Any | HTTPValidationError + """ + + + return sync_detailed( + gift_id=gift_id, +client=client, + + ).parsed + +async def asyncio_detailed( + gift_id: UUID, + *, + client: AuthenticatedClient, + +) -> Response[Any | HTTPValidationError]: + """ Delete Gift + + Delete a gift. + + Args: + gift_id (UUID): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Any | HTTPValidationError] + """ + + + kwargs = _get_kwargs( + gift_id=gift_id, + + ) + + response = await client.get_async_httpx_client().request( + **kwargs + ) + + return _build_response(client=client, response=response) + +async def asyncio( + gift_id: UUID, + *, + client: AuthenticatedClient, + +) -> Any | HTTPValidationError | None: + """ Delete Gift + + Delete a gift. + + Args: + gift_id (UUID): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Any | HTTPValidationError + """ + + + return (await asyncio_detailed( + gift_id=gift_id, +client=client, + + )).parsed diff --git a/kindred-sdk/personal_crm_client/api/gifts/gifts_list_gifts.py b/kindred-sdk/personal_crm_client/api/gifts/gifts_list_gifts.py new file mode 100644 index 00000000..2220f072 --- /dev/null +++ b/kindred-sdk/personal_crm_client/api/gifts/gifts_list_gifts.py @@ -0,0 +1,188 @@ +from http import HTTPStatus +from typing import Any, cast +from urllib.parse import quote + +import httpx + +from ...client import AuthenticatedClient, Client +from ...types import Response, UNSET +from ... import errors + +from ...models.gifts_public import GiftsPublic +from ...models.http_validation_error import HTTPValidationError +from typing import cast +from uuid import UUID + + + +def _get_kwargs( + contact_id: UUID, + +) -> dict[str, Any]: + + + + + + + _kwargs: dict[str, Any] = { + "method": "get", + "url": "/api/v1/gifts/contact/{contact_id}".format(contact_id=quote(str(contact_id), safe=""),), + } + + + return _kwargs + + + +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> GiftsPublic | HTTPValidationError | None: + if response.status_code == 200: + response_200 = GiftsPublic.from_dict(response.json()) + + + + return response_200 + + if response.status_code == 422: + response_422 = HTTPValidationError.from_dict(response.json()) + + + + return response_422 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[GiftsPublic | HTTPValidationError]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + contact_id: UUID, + *, + client: AuthenticatedClient, + +) -> Response[GiftsPublic | HTTPValidationError]: + """ List Gifts + + List gifts for a contact. + + Args: + contact_id (UUID): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[GiftsPublic | HTTPValidationError] + """ + + + kwargs = _get_kwargs( + contact_id=contact_id, + + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + +def sync( + contact_id: UUID, + *, + client: AuthenticatedClient, + +) -> GiftsPublic | HTTPValidationError | None: + """ List Gifts + + List gifts for a contact. + + Args: + contact_id (UUID): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + GiftsPublic | HTTPValidationError + """ + + + return sync_detailed( + contact_id=contact_id, +client=client, + + ).parsed + +async def asyncio_detailed( + contact_id: UUID, + *, + client: AuthenticatedClient, + +) -> Response[GiftsPublic | HTTPValidationError]: + """ List Gifts + + List gifts for a contact. + + Args: + contact_id (UUID): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[GiftsPublic | HTTPValidationError] + """ + + + kwargs = _get_kwargs( + contact_id=contact_id, + + ) + + response = await client.get_async_httpx_client().request( + **kwargs + ) + + return _build_response(client=client, response=response) + +async def asyncio( + contact_id: UUID, + *, + client: AuthenticatedClient, + +) -> GiftsPublic | HTTPValidationError | None: + """ List Gifts + + List gifts for a contact. + + Args: + contact_id (UUID): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + GiftsPublic | HTTPValidationError + """ + + + return (await asyncio_detailed( + contact_id=contact_id, +client=client, + + )).parsed diff --git a/kindred-sdk/personal_crm_client/api/gifts/gifts_update_gift.py b/kindred-sdk/personal_crm_client/api/gifts/gifts_update_gift.py new file mode 100644 index 00000000..3263cefa --- /dev/null +++ b/kindred-sdk/personal_crm_client/api/gifts/gifts_update_gift.py @@ -0,0 +1,209 @@ +from http import HTTPStatus +from typing import Any, cast +from urllib.parse import quote + +import httpx + +from ...client import AuthenticatedClient, Client +from ...types import Response, UNSET +from ... import errors + +from ...models.gift_public import GiftPublic +from ...models.gift_update import GiftUpdate +from ...models.http_validation_error import HTTPValidationError +from typing import cast +from uuid import UUID + + + +def _get_kwargs( + gift_id: UUID, + *, + body: GiftUpdate, + +) -> dict[str, Any]: + headers: dict[str, Any] = {} + + + + + + + _kwargs: dict[str, Any] = { + "method": "patch", + "url": "/api/v1/gifts/{gift_id}".format(gift_id=quote(str(gift_id), safe=""),), + } + + _kwargs["json"] = body.to_dict() + + + headers["Content-Type"] = "application/json" + + _kwargs["headers"] = headers + return _kwargs + + + +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> GiftPublic | HTTPValidationError | None: + if response.status_code == 200: + response_200 = GiftPublic.from_dict(response.json()) + + + + return response_200 + + if response.status_code == 422: + response_422 = HTTPValidationError.from_dict(response.json()) + + + + return response_422 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[GiftPublic | HTTPValidationError]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + gift_id: UUID, + *, + client: AuthenticatedClient, + body: GiftUpdate, + +) -> Response[GiftPublic | HTTPValidationError]: + """ Update Gift + + Update a gift. + + Args: + gift_id (UUID): + body (GiftUpdate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[GiftPublic | HTTPValidationError] + """ + + + kwargs = _get_kwargs( + gift_id=gift_id, +body=body, + + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + +def sync( + gift_id: UUID, + *, + client: AuthenticatedClient, + body: GiftUpdate, + +) -> GiftPublic | HTTPValidationError | None: + """ Update Gift + + Update a gift. + + Args: + gift_id (UUID): + body (GiftUpdate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + GiftPublic | HTTPValidationError + """ + + + return sync_detailed( + gift_id=gift_id, +client=client, +body=body, + + ).parsed + +async def asyncio_detailed( + gift_id: UUID, + *, + client: AuthenticatedClient, + body: GiftUpdate, + +) -> Response[GiftPublic | HTTPValidationError]: + """ Update Gift + + Update a gift. + + Args: + gift_id (UUID): + body (GiftUpdate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[GiftPublic | HTTPValidationError] + """ + + + kwargs = _get_kwargs( + gift_id=gift_id, +body=body, + + ) + + response = await client.get_async_httpx_client().request( + **kwargs + ) + + return _build_response(client=client, response=response) + +async def asyncio( + gift_id: UUID, + *, + client: AuthenticatedClient, + body: GiftUpdate, + +) -> GiftPublic | HTTPValidationError | None: + """ Update Gift + + Update a gift. + + Args: + gift_id (UUID): + body (GiftUpdate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + GiftPublic | HTTPValidationError + """ + + + return (await asyncio_detailed( + gift_id=gift_id, +client=client, +body=body, + + )).parsed diff --git a/kindred-sdk/personal_crm_client/api/groups/__init__.py b/kindred-sdk/personal_crm_client/api/groups/__init__.py new file mode 100644 index 00000000..c9921b5f --- /dev/null +++ b/kindred-sdk/personal_crm_client/api/groups/__init__.py @@ -0,0 +1 @@ +""" Contains endpoint functions for accessing the API """ diff --git a/kindred-sdk/personal_crm_client/api/groups/groups_create_group_route.py b/kindred-sdk/personal_crm_client/api/groups/groups_create_group_route.py new file mode 100644 index 00000000..929217e2 --- /dev/null +++ b/kindred-sdk/personal_crm_client/api/groups/groups_create_group_route.py @@ -0,0 +1,195 @@ +from http import HTTPStatus +from typing import Any, cast +from urllib.parse import quote + +import httpx + +from ...client import AuthenticatedClient, Client +from ...types import Response, UNSET +from ... import errors + +from ...models.group_create import GroupCreate +from ...models.group_public import GroupPublic +from ...models.http_validation_error import HTTPValidationError +from typing import cast + + + +def _get_kwargs( + *, + body: GroupCreate, + +) -> dict[str, Any]: + headers: dict[str, Any] = {} + + + + + + + _kwargs: dict[str, Any] = { + "method": "post", + "url": "/api/v1/groups/", + } + + _kwargs["json"] = body.to_dict() + + + headers["Content-Type"] = "application/json" + + _kwargs["headers"] = headers + return _kwargs + + + +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> GroupPublic | HTTPValidationError | None: + if response.status_code == 200: + response_200 = GroupPublic.from_dict(response.json()) + + + + return response_200 + + if response.status_code == 422: + response_422 = HTTPValidationError.from_dict(response.json()) + + + + return response_422 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[GroupPublic | HTTPValidationError]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + *, + client: AuthenticatedClient, + body: GroupCreate, + +) -> Response[GroupPublic | HTTPValidationError]: + """ Create Group Route + + Create a new group. + + Args: + body (GroupCreate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[GroupPublic | HTTPValidationError] + """ + + + kwargs = _get_kwargs( + body=body, + + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + +def sync( + *, + client: AuthenticatedClient, + body: GroupCreate, + +) -> GroupPublic | HTTPValidationError | None: + """ Create Group Route + + Create a new group. + + Args: + body (GroupCreate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + GroupPublic | HTTPValidationError + """ + + + return sync_detailed( + client=client, +body=body, + + ).parsed + +async def asyncio_detailed( + *, + client: AuthenticatedClient, + body: GroupCreate, + +) -> Response[GroupPublic | HTTPValidationError]: + """ Create Group Route + + Create a new group. + + Args: + body (GroupCreate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[GroupPublic | HTTPValidationError] + """ + + + kwargs = _get_kwargs( + body=body, + + ) + + response = await client.get_async_httpx_client().request( + **kwargs + ) + + return _build_response(client=client, response=response) + +async def asyncio( + *, + client: AuthenticatedClient, + body: GroupCreate, + +) -> GroupPublic | HTTPValidationError | None: + """ Create Group Route + + Create a new group. + + Args: + body (GroupCreate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + GroupPublic | HTTPValidationError + """ + + + return (await asyncio_detailed( + client=client, +body=body, + + )).parsed diff --git a/kindred-sdk/personal_crm_client/api/groups/groups_delete_group.py b/kindred-sdk/personal_crm_client/api/groups/groups_delete_group.py new file mode 100644 index 00000000..07305adc --- /dev/null +++ b/kindred-sdk/personal_crm_client/api/groups/groups_delete_group.py @@ -0,0 +1,184 @@ +from http import HTTPStatus +from typing import Any, cast +from urllib.parse import quote + +import httpx + +from ...client import AuthenticatedClient, Client +from ...types import Response, UNSET +from ... import errors + +from ...models.http_validation_error import HTTPValidationError +from typing import cast +from uuid import UUID + + + +def _get_kwargs( + group_id: UUID, + +) -> dict[str, Any]: + + + + + + + _kwargs: dict[str, Any] = { + "method": "delete", + "url": "/api/v1/groups/{group_id}".format(group_id=quote(str(group_id), safe=""),), + } + + + return _kwargs + + + +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Any | HTTPValidationError | None: + if response.status_code == 200: + response_200 = response.json() + return response_200 + + if response.status_code == 422: + response_422 = HTTPValidationError.from_dict(response.json()) + + + + return response_422 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[Any | HTTPValidationError]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + group_id: UUID, + *, + client: AuthenticatedClient, + +) -> Response[Any | HTTPValidationError]: + """ Delete Group + + Delete a group. + + Args: + group_id (UUID): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Any | HTTPValidationError] + """ + + + kwargs = _get_kwargs( + group_id=group_id, + + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + +def sync( + group_id: UUID, + *, + client: AuthenticatedClient, + +) -> Any | HTTPValidationError | None: + """ Delete Group + + Delete a group. + + Args: + group_id (UUID): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Any | HTTPValidationError + """ + + + return sync_detailed( + group_id=group_id, +client=client, + + ).parsed + +async def asyncio_detailed( + group_id: UUID, + *, + client: AuthenticatedClient, + +) -> Response[Any | HTTPValidationError]: + """ Delete Group + + Delete a group. + + Args: + group_id (UUID): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Any | HTTPValidationError] + """ + + + kwargs = _get_kwargs( + group_id=group_id, + + ) + + response = await client.get_async_httpx_client().request( + **kwargs + ) + + return _build_response(client=client, response=response) + +async def asyncio( + group_id: UUID, + *, + client: AuthenticatedClient, + +) -> Any | HTTPValidationError | None: + """ Delete Group + + Delete a group. + + Args: + group_id (UUID): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Any | HTTPValidationError + """ + + + return (await asyncio_detailed( + group_id=group_id, +client=client, + + )).parsed diff --git a/kindred-sdk/personal_crm_client/api/groups/groups_list_groups.py b/kindred-sdk/personal_crm_client/api/groups/groups_list_groups.py new file mode 100644 index 00000000..50f8ec89 --- /dev/null +++ b/kindred-sdk/personal_crm_client/api/groups/groups_list_groups.py @@ -0,0 +1,211 @@ +from http import HTTPStatus +from typing import Any, cast +from urllib.parse import quote + +import httpx + +from ...client import AuthenticatedClient, Client +from ...types import Response, UNSET +from ... import errors + +from ...models.groups_public import GroupsPublic +from ...models.http_validation_error import HTTPValidationError +from ...types import UNSET, Unset +from typing import cast + + + +def _get_kwargs( + *, + skip: int | Unset = 0, + limit: int | Unset = 100, + +) -> dict[str, Any]: + + + + + params: dict[str, Any] = {} + + params["skip"] = skip + + params["limit"] = limit + + + params = {k: v for k, v in params.items() if v is not UNSET and v is not None} + + + _kwargs: dict[str, Any] = { + "method": "get", + "url": "/api/v1/groups/", + "params": params, + } + + + return _kwargs + + + +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> GroupsPublic | HTTPValidationError | None: + if response.status_code == 200: + response_200 = GroupsPublic.from_dict(response.json()) + + + + return response_200 + + if response.status_code == 422: + response_422 = HTTPValidationError.from_dict(response.json()) + + + + return response_422 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[GroupsPublic | HTTPValidationError]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + *, + client: AuthenticatedClient, + skip: int | Unset = 0, + limit: int | Unset = 100, + +) -> Response[GroupsPublic | HTTPValidationError]: + """ List Groups + + List all groups for the current user. + + Args: + skip (int | Unset): Default: 0. + limit (int | Unset): Default: 100. + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[GroupsPublic | HTTPValidationError] + """ + + + kwargs = _get_kwargs( + skip=skip, +limit=limit, + + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + +def sync( + *, + client: AuthenticatedClient, + skip: int | Unset = 0, + limit: int | Unset = 100, + +) -> GroupsPublic | HTTPValidationError | None: + """ List Groups + + List all groups for the current user. + + Args: + skip (int | Unset): Default: 0. + limit (int | Unset): Default: 100. + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + GroupsPublic | HTTPValidationError + """ + + + return sync_detailed( + client=client, +skip=skip, +limit=limit, + + ).parsed + +async def asyncio_detailed( + *, + client: AuthenticatedClient, + skip: int | Unset = 0, + limit: int | Unset = 100, + +) -> Response[GroupsPublic | HTTPValidationError]: + """ List Groups + + List all groups for the current user. + + Args: + skip (int | Unset): Default: 0. + limit (int | Unset): Default: 100. + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[GroupsPublic | HTTPValidationError] + """ + + + kwargs = _get_kwargs( + skip=skip, +limit=limit, + + ) + + response = await client.get_async_httpx_client().request( + **kwargs + ) + + return _build_response(client=client, response=response) + +async def asyncio( + *, + client: AuthenticatedClient, + skip: int | Unset = 0, + limit: int | Unset = 100, + +) -> GroupsPublic | HTTPValidationError | None: + """ List Groups + + List all groups for the current user. + + Args: + skip (int | Unset): Default: 0. + limit (int | Unset): Default: 100. + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + GroupsPublic | HTTPValidationError + """ + + + return (await asyncio_detailed( + client=client, +skip=skip, +limit=limit, + + )).parsed diff --git a/kindred-sdk/personal_crm_client/api/groups/groups_update_group.py b/kindred-sdk/personal_crm_client/api/groups/groups_update_group.py new file mode 100644 index 00000000..44ebb5dd --- /dev/null +++ b/kindred-sdk/personal_crm_client/api/groups/groups_update_group.py @@ -0,0 +1,209 @@ +from http import HTTPStatus +from typing import Any, cast +from urllib.parse import quote + +import httpx + +from ...client import AuthenticatedClient, Client +from ...types import Response, UNSET +from ... import errors + +from ...models.group_public import GroupPublic +from ...models.group_update import GroupUpdate +from ...models.http_validation_error import HTTPValidationError +from typing import cast +from uuid import UUID + + + +def _get_kwargs( + group_id: UUID, + *, + body: GroupUpdate, + +) -> dict[str, Any]: + headers: dict[str, Any] = {} + + + + + + + _kwargs: dict[str, Any] = { + "method": "patch", + "url": "/api/v1/groups/{group_id}".format(group_id=quote(str(group_id), safe=""),), + } + + _kwargs["json"] = body.to_dict() + + + headers["Content-Type"] = "application/json" + + _kwargs["headers"] = headers + return _kwargs + + + +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> GroupPublic | HTTPValidationError | None: + if response.status_code == 200: + response_200 = GroupPublic.from_dict(response.json()) + + + + return response_200 + + if response.status_code == 422: + response_422 = HTTPValidationError.from_dict(response.json()) + + + + return response_422 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[GroupPublic | HTTPValidationError]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + group_id: UUID, + *, + client: AuthenticatedClient, + body: GroupUpdate, + +) -> Response[GroupPublic | HTTPValidationError]: + """ Update Group + + Update a group. + + Args: + group_id (UUID): + body (GroupUpdate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[GroupPublic | HTTPValidationError] + """ + + + kwargs = _get_kwargs( + group_id=group_id, +body=body, + + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + +def sync( + group_id: UUID, + *, + client: AuthenticatedClient, + body: GroupUpdate, + +) -> GroupPublic | HTTPValidationError | None: + """ Update Group + + Update a group. + + Args: + group_id (UUID): + body (GroupUpdate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + GroupPublic | HTTPValidationError + """ + + + return sync_detailed( + group_id=group_id, +client=client, +body=body, + + ).parsed + +async def asyncio_detailed( + group_id: UUID, + *, + client: AuthenticatedClient, + body: GroupUpdate, + +) -> Response[GroupPublic | HTTPValidationError]: + """ Update Group + + Update a group. + + Args: + group_id (UUID): + body (GroupUpdate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[GroupPublic | HTTPValidationError] + """ + + + kwargs = _get_kwargs( + group_id=group_id, +body=body, + + ) + + response = await client.get_async_httpx_client().request( + **kwargs + ) + + return _build_response(client=client, response=response) + +async def asyncio( + group_id: UUID, + *, + client: AuthenticatedClient, + body: GroupUpdate, + +) -> GroupPublic | HTTPValidationError | None: + """ Update Group + + Update a group. + + Args: + group_id (UUID): + body (GroupUpdate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + GroupPublic | HTTPValidationError + """ + + + return (await asyncio_detailed( + group_id=group_id, +client=client, +body=body, + + )).parsed diff --git a/kindred-sdk/personal_crm_client/api/import_export/__init__.py b/kindred-sdk/personal_crm_client/api/import_export/__init__.py new file mode 100644 index 00000000..c9921b5f --- /dev/null +++ b/kindred-sdk/personal_crm_client/api/import_export/__init__.py @@ -0,0 +1 @@ +""" Contains endpoint functions for accessing the API """ diff --git a/kindred-sdk/personal_crm_client/api/import_export/import_export_export_json.py b/kindred-sdk/personal_crm_client/api/import_export/import_export_export_json.py new file mode 100644 index 00000000..95b07358 --- /dev/null +++ b/kindred-sdk/personal_crm_client/api/import_export/import_export_export_json.py @@ -0,0 +1,108 @@ +from http import HTTPStatus +from typing import Any, cast +from urllib.parse import quote + +import httpx + +from ...client import AuthenticatedClient, Client +from ...types import Response, UNSET +from ... import errors + + + + +def _get_kwargs( + +) -> dict[str, Any]: + + + + + + + _kwargs: dict[str, Any] = { + "method": "get", + "url": "/api/v1/import-export/export/json", + } + + + return _kwargs + + + +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Any | None: + if response.status_code == 200: + return None + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[Any]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + *, + client: AuthenticatedClient, + +) -> Response[Any]: + """ Export Json + + Export all data as JSON. + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Any] + """ + + + kwargs = _get_kwargs( + + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + + +async def asyncio_detailed( + *, + client: AuthenticatedClient, + +) -> Response[Any]: + """ Export Json + + Export all data as JSON. + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Any] + """ + + + kwargs = _get_kwargs( + + ) + + response = await client.get_async_httpx_client().request( + **kwargs + ) + + return _build_response(client=client, response=response) + diff --git a/kindred-sdk/personal_crm_client/api/import_export/import_export_export_vcard.py b/kindred-sdk/personal_crm_client/api/import_export/import_export_export_vcard.py new file mode 100644 index 00000000..a6d9a66c --- /dev/null +++ b/kindred-sdk/personal_crm_client/api/import_export/import_export_export_vcard.py @@ -0,0 +1,108 @@ +from http import HTTPStatus +from typing import Any, cast +from urllib.parse import quote + +import httpx + +from ...client import AuthenticatedClient, Client +from ...types import Response, UNSET +from ... import errors + + + + +def _get_kwargs( + +) -> dict[str, Any]: + + + + + + + _kwargs: dict[str, Any] = { + "method": "get", + "url": "/api/v1/import-export/export/vcard", + } + + + return _kwargs + + + +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Any | None: + if response.status_code == 200: + return None + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[Any]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + *, + client: AuthenticatedClient, + +) -> Response[Any]: + """ Export Vcard + + Export all contacts as a single .vcf file. + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Any] + """ + + + kwargs = _get_kwargs( + + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + + +async def asyncio_detailed( + *, + client: AuthenticatedClient, + +) -> Response[Any]: + """ Export Vcard + + Export all contacts as a single .vcf file. + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Any] + """ + + + kwargs = _get_kwargs( + + ) + + response = await client.get_async_httpx_client().request( + **kwargs + ) + + return _build_response(client=client, response=response) + diff --git a/kindred-sdk/personal_crm_client/api/import_export/import_export_import_vcard.py b/kindred-sdk/personal_crm_client/api/import_export/import_export_import_vcard.py new file mode 100644 index 00000000..ffcb5802 --- /dev/null +++ b/kindred-sdk/personal_crm_client/api/import_export/import_export_import_vcard.py @@ -0,0 +1,190 @@ +from http import HTTPStatus +from typing import Any, cast +from urllib.parse import quote + +import httpx + +from ...client import AuthenticatedClient, Client +from ...types import Response, UNSET +from ... import errors + +from ...models.body_import_export_import_vcard import BodyImportExportImportVcard +from ...models.http_validation_error import HTTPValidationError +from typing import cast + + + +def _get_kwargs( + *, + body: BodyImportExportImportVcard, + +) -> dict[str, Any]: + headers: dict[str, Any] = {} + + + + + + + _kwargs: dict[str, Any] = { + "method": "post", + "url": "/api/v1/import-export/import/vcard", + } + + _kwargs["files"] = body.to_multipart() + + + + _kwargs["headers"] = headers + return _kwargs + + + +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Any | HTTPValidationError | None: + if response.status_code == 200: + response_200 = response.json() + return response_200 + + if response.status_code == 422: + response_422 = HTTPValidationError.from_dict(response.json()) + + + + return response_422 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[Any | HTTPValidationError]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + *, + client: AuthenticatedClient, + body: BodyImportExportImportVcard, + +) -> Response[Any | HTTPValidationError]: + """ Import Vcard + + Import contacts from a .vcf file (supports multiple vCards in one file). + + Args: + body (BodyImportExportImportVcard): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Any | HTTPValidationError] + """ + + + kwargs = _get_kwargs( + body=body, + + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + +def sync( + *, + client: AuthenticatedClient, + body: BodyImportExportImportVcard, + +) -> Any | HTTPValidationError | None: + """ Import Vcard + + Import contacts from a .vcf file (supports multiple vCards in one file). + + Args: + body (BodyImportExportImportVcard): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Any | HTTPValidationError + """ + + + return sync_detailed( + client=client, +body=body, + + ).parsed + +async def asyncio_detailed( + *, + client: AuthenticatedClient, + body: BodyImportExportImportVcard, + +) -> Response[Any | HTTPValidationError]: + """ Import Vcard + + Import contacts from a .vcf file (supports multiple vCards in one file). + + Args: + body (BodyImportExportImportVcard): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Any | HTTPValidationError] + """ + + + kwargs = _get_kwargs( + body=body, + + ) + + response = await client.get_async_httpx_client().request( + **kwargs + ) + + return _build_response(client=client, response=response) + +async def asyncio( + *, + client: AuthenticatedClient, + body: BodyImportExportImportVcard, + +) -> Any | HTTPValidationError | None: + """ Import Vcard + + Import contacts from a .vcf file (supports multiple vCards in one file). + + Args: + body (BodyImportExportImportVcard): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Any | HTTPValidationError + """ + + + return (await asyncio_detailed( + client=client, +body=body, + + )).parsed diff --git a/kindred-sdk/personal_crm_client/api/interactions/__init__.py b/kindred-sdk/personal_crm_client/api/interactions/__init__.py new file mode 100644 index 00000000..c9921b5f --- /dev/null +++ b/kindred-sdk/personal_crm_client/api/interactions/__init__.py @@ -0,0 +1 @@ +""" Contains endpoint functions for accessing the API """ diff --git a/kindred-sdk/personal_crm_client/api/interactions/interactions_create_interaction_route.py b/kindred-sdk/personal_crm_client/api/interactions/interactions_create_interaction_route.py new file mode 100644 index 00000000..f9f99942 --- /dev/null +++ b/kindred-sdk/personal_crm_client/api/interactions/interactions_create_interaction_route.py @@ -0,0 +1,195 @@ +from http import HTTPStatus +from typing import Any, cast +from urllib.parse import quote + +import httpx + +from ...client import AuthenticatedClient, Client +from ...types import Response, UNSET +from ... import errors + +from ...models.http_validation_error import HTTPValidationError +from ...models.interaction_create import InteractionCreate +from ...models.interaction_public import InteractionPublic +from typing import cast + + + +def _get_kwargs( + *, + body: InteractionCreate, + +) -> dict[str, Any]: + headers: dict[str, Any] = {} + + + + + + + _kwargs: dict[str, Any] = { + "method": "post", + "url": "/api/v1/interactions/", + } + + _kwargs["json"] = body.to_dict() + + + headers["Content-Type"] = "application/json" + + _kwargs["headers"] = headers + return _kwargs + + + +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> HTTPValidationError | InteractionPublic | None: + if response.status_code == 200: + response_200 = InteractionPublic.from_dict(response.json()) + + + + return response_200 + + if response.status_code == 422: + response_422 = HTTPValidationError.from_dict(response.json()) + + + + return response_422 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[HTTPValidationError | InteractionPublic]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + *, + client: AuthenticatedClient, + body: InteractionCreate, + +) -> Response[HTTPValidationError | InteractionPublic]: + """ Create Interaction Route + + Create a new interaction with one or more attendees. + + Args: + body (InteractionCreate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[HTTPValidationError | InteractionPublic] + """ + + + kwargs = _get_kwargs( + body=body, + + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + +def sync( + *, + client: AuthenticatedClient, + body: InteractionCreate, + +) -> HTTPValidationError | InteractionPublic | None: + """ Create Interaction Route + + Create a new interaction with one or more attendees. + + Args: + body (InteractionCreate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + HTTPValidationError | InteractionPublic + """ + + + return sync_detailed( + client=client, +body=body, + + ).parsed + +async def asyncio_detailed( + *, + client: AuthenticatedClient, + body: InteractionCreate, + +) -> Response[HTTPValidationError | InteractionPublic]: + """ Create Interaction Route + + Create a new interaction with one or more attendees. + + Args: + body (InteractionCreate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[HTTPValidationError | InteractionPublic] + """ + + + kwargs = _get_kwargs( + body=body, + + ) + + response = await client.get_async_httpx_client().request( + **kwargs + ) + + return _build_response(client=client, response=response) + +async def asyncio( + *, + client: AuthenticatedClient, + body: InteractionCreate, + +) -> HTTPValidationError | InteractionPublic | None: + """ Create Interaction Route + + Create a new interaction with one or more attendees. + + Args: + body (InteractionCreate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + HTTPValidationError | InteractionPublic + """ + + + return (await asyncio_detailed( + client=client, +body=body, + + )).parsed diff --git a/kindred-sdk/personal_crm_client/api/interactions/interactions_delete_interaction.py b/kindred-sdk/personal_crm_client/api/interactions/interactions_delete_interaction.py new file mode 100644 index 00000000..f8f23ad8 --- /dev/null +++ b/kindred-sdk/personal_crm_client/api/interactions/interactions_delete_interaction.py @@ -0,0 +1,184 @@ +from http import HTTPStatus +from typing import Any, cast +from urllib.parse import quote + +import httpx + +from ...client import AuthenticatedClient, Client +from ...types import Response, UNSET +from ... import errors + +from ...models.http_validation_error import HTTPValidationError +from typing import cast +from uuid import UUID + + + +def _get_kwargs( + interaction_id: UUID, + +) -> dict[str, Any]: + + + + + + + _kwargs: dict[str, Any] = { + "method": "delete", + "url": "/api/v1/interactions/{interaction_id}".format(interaction_id=quote(str(interaction_id), safe=""),), + } + + + return _kwargs + + + +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Any | HTTPValidationError | None: + if response.status_code == 200: + response_200 = response.json() + return response_200 + + if response.status_code == 422: + response_422 = HTTPValidationError.from_dict(response.json()) + + + + return response_422 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[Any | HTTPValidationError]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + interaction_id: UUID, + *, + client: AuthenticatedClient, + +) -> Response[Any | HTTPValidationError]: + """ Delete Interaction + + Delete an interaction and recompute each attendee's last_contacted_at. + + Args: + interaction_id (UUID): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Any | HTTPValidationError] + """ + + + kwargs = _get_kwargs( + interaction_id=interaction_id, + + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + +def sync( + interaction_id: UUID, + *, + client: AuthenticatedClient, + +) -> Any | HTTPValidationError | None: + """ Delete Interaction + + Delete an interaction and recompute each attendee's last_contacted_at. + + Args: + interaction_id (UUID): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Any | HTTPValidationError + """ + + + return sync_detailed( + interaction_id=interaction_id, +client=client, + + ).parsed + +async def asyncio_detailed( + interaction_id: UUID, + *, + client: AuthenticatedClient, + +) -> Response[Any | HTTPValidationError]: + """ Delete Interaction + + Delete an interaction and recompute each attendee's last_contacted_at. + + Args: + interaction_id (UUID): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Any | HTTPValidationError] + """ + + + kwargs = _get_kwargs( + interaction_id=interaction_id, + + ) + + response = await client.get_async_httpx_client().request( + **kwargs + ) + + return _build_response(client=client, response=response) + +async def asyncio( + interaction_id: UUID, + *, + client: AuthenticatedClient, + +) -> Any | HTTPValidationError | None: + """ Delete Interaction + + Delete an interaction and recompute each attendee's last_contacted_at. + + Args: + interaction_id (UUID): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Any | HTTPValidationError + """ + + + return (await asyncio_detailed( + interaction_id=interaction_id, +client=client, + + )).parsed diff --git a/kindred-sdk/personal_crm_client/api/interactions/interactions_list_interactions.py b/kindred-sdk/personal_crm_client/api/interactions/interactions_list_interactions.py new file mode 100644 index 00000000..9d49bb9f --- /dev/null +++ b/kindred-sdk/personal_crm_client/api/interactions/interactions_list_interactions.py @@ -0,0 +1,234 @@ +from http import HTTPStatus +from typing import Any, cast +from urllib.parse import quote + +import httpx + +from ...client import AuthenticatedClient, Client +from ...types import Response, UNSET +from ... import errors + +from ...models.http_validation_error import HTTPValidationError +from ...models.interactions_public import InteractionsPublic +from ...types import UNSET, Unset +from typing import cast +from uuid import UUID + + + +def _get_kwargs( + *, + contact_id: None | Unset | UUID = UNSET, + skip: int | Unset = 0, + limit: int | Unset = 100, + +) -> dict[str, Any]: + + + + + params: dict[str, Any] = {} + + json_contact_id: None | str | Unset + if isinstance(contact_id, Unset): + json_contact_id = UNSET + elif isinstance(contact_id, UUID): + json_contact_id = str(contact_id) + else: + json_contact_id = contact_id + params["contact_id"] = json_contact_id + + params["skip"] = skip + + params["limit"] = limit + + + params = {k: v for k, v in params.items() if v is not UNSET and v is not None} + + + _kwargs: dict[str, Any] = { + "method": "get", + "url": "/api/v1/interactions/", + "params": params, + } + + + return _kwargs + + + +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> HTTPValidationError | InteractionsPublic | None: + if response.status_code == 200: + response_200 = InteractionsPublic.from_dict(response.json()) + + + + return response_200 + + if response.status_code == 422: + response_422 = HTTPValidationError.from_dict(response.json()) + + + + return response_422 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[HTTPValidationError | InteractionsPublic]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + *, + client: AuthenticatedClient, + contact_id: None | Unset | UUID = UNSET, + skip: int | Unset = 0, + limit: int | Unset = 100, + +) -> Response[HTTPValidationError | InteractionsPublic]: + """ List Interactions + + List interactions. Pass ``contact_id`` to filter by attendee. + + Args: + contact_id (None | Unset | UUID): + skip (int | Unset): Default: 0. + limit (int | Unset): Default: 100. + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[HTTPValidationError | InteractionsPublic] + """ + + + kwargs = _get_kwargs( + contact_id=contact_id, +skip=skip, +limit=limit, + + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + +def sync( + *, + client: AuthenticatedClient, + contact_id: None | Unset | UUID = UNSET, + skip: int | Unset = 0, + limit: int | Unset = 100, + +) -> HTTPValidationError | InteractionsPublic | None: + """ List Interactions + + List interactions. Pass ``contact_id`` to filter by attendee. + + Args: + contact_id (None | Unset | UUID): + skip (int | Unset): Default: 0. + limit (int | Unset): Default: 100. + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + HTTPValidationError | InteractionsPublic + """ + + + return sync_detailed( + client=client, +contact_id=contact_id, +skip=skip, +limit=limit, + + ).parsed + +async def asyncio_detailed( + *, + client: AuthenticatedClient, + contact_id: None | Unset | UUID = UNSET, + skip: int | Unset = 0, + limit: int | Unset = 100, + +) -> Response[HTTPValidationError | InteractionsPublic]: + """ List Interactions + + List interactions. Pass ``contact_id`` to filter by attendee. + + Args: + contact_id (None | Unset | UUID): + skip (int | Unset): Default: 0. + limit (int | Unset): Default: 100. + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[HTTPValidationError | InteractionsPublic] + """ + + + kwargs = _get_kwargs( + contact_id=contact_id, +skip=skip, +limit=limit, + + ) + + response = await client.get_async_httpx_client().request( + **kwargs + ) + + return _build_response(client=client, response=response) + +async def asyncio( + *, + client: AuthenticatedClient, + contact_id: None | Unset | UUID = UNSET, + skip: int | Unset = 0, + limit: int | Unset = 100, + +) -> HTTPValidationError | InteractionsPublic | None: + """ List Interactions + + List interactions. Pass ``contact_id`` to filter by attendee. + + Args: + contact_id (None | Unset | UUID): + skip (int | Unset): Default: 0. + limit (int | Unset): Default: 100. + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + HTTPValidationError | InteractionsPublic + """ + + + return (await asyncio_detailed( + client=client, +contact_id=contact_id, +skip=skip, +limit=limit, + + )).parsed diff --git a/kindred-sdk/personal_crm_client/api/interactions/interactions_update_interaction.py b/kindred-sdk/personal_crm_client/api/interactions/interactions_update_interaction.py new file mode 100644 index 00000000..e0046d9f --- /dev/null +++ b/kindred-sdk/personal_crm_client/api/interactions/interactions_update_interaction.py @@ -0,0 +1,209 @@ +from http import HTTPStatus +from typing import Any, cast +from urllib.parse import quote + +import httpx + +from ...client import AuthenticatedClient, Client +from ...types import Response, UNSET +from ... import errors + +from ...models.http_validation_error import HTTPValidationError +from ...models.interaction_public import InteractionPublic +from ...models.interaction_update import InteractionUpdate +from typing import cast +from uuid import UUID + + + +def _get_kwargs( + interaction_id: UUID, + *, + body: InteractionUpdate, + +) -> dict[str, Any]: + headers: dict[str, Any] = {} + + + + + + + _kwargs: dict[str, Any] = { + "method": "patch", + "url": "/api/v1/interactions/{interaction_id}".format(interaction_id=quote(str(interaction_id), safe=""),), + } + + _kwargs["json"] = body.to_dict() + + + headers["Content-Type"] = "application/json" + + _kwargs["headers"] = headers + return _kwargs + + + +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> HTTPValidationError | InteractionPublic | None: + if response.status_code == 200: + response_200 = InteractionPublic.from_dict(response.json()) + + + + return response_200 + + if response.status_code == 422: + response_422 = HTTPValidationError.from_dict(response.json()) + + + + return response_422 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[HTTPValidationError | InteractionPublic]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + interaction_id: UUID, + *, + client: AuthenticatedClient, + body: InteractionUpdate, + +) -> Response[HTTPValidationError | InteractionPublic]: + """ Update Interaction + + Update an interaction; ``attendee_ids`` replaces the attendee set. + + Args: + interaction_id (UUID): + body (InteractionUpdate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[HTTPValidationError | InteractionPublic] + """ + + + kwargs = _get_kwargs( + interaction_id=interaction_id, +body=body, + + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + +def sync( + interaction_id: UUID, + *, + client: AuthenticatedClient, + body: InteractionUpdate, + +) -> HTTPValidationError | InteractionPublic | None: + """ Update Interaction + + Update an interaction; ``attendee_ids`` replaces the attendee set. + + Args: + interaction_id (UUID): + body (InteractionUpdate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + HTTPValidationError | InteractionPublic + """ + + + return sync_detailed( + interaction_id=interaction_id, +client=client, +body=body, + + ).parsed + +async def asyncio_detailed( + interaction_id: UUID, + *, + client: AuthenticatedClient, + body: InteractionUpdate, + +) -> Response[HTTPValidationError | InteractionPublic]: + """ Update Interaction + + Update an interaction; ``attendee_ids`` replaces the attendee set. + + Args: + interaction_id (UUID): + body (InteractionUpdate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[HTTPValidationError | InteractionPublic] + """ + + + kwargs = _get_kwargs( + interaction_id=interaction_id, +body=body, + + ) + + response = await client.get_async_httpx_client().request( + **kwargs + ) + + return _build_response(client=client, response=response) + +async def asyncio( + interaction_id: UUID, + *, + client: AuthenticatedClient, + body: InteractionUpdate, + +) -> HTTPValidationError | InteractionPublic | None: + """ Update Interaction + + Update an interaction; ``attendee_ids`` replaces the attendee set. + + Args: + interaction_id (UUID): + body (InteractionUpdate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + HTTPValidationError | InteractionPublic + """ + + + return (await asyncio_detailed( + interaction_id=interaction_id, +client=client, +body=body, + + )).parsed diff --git a/kindred-sdk/personal_crm_client/api/journal/__init__.py b/kindred-sdk/personal_crm_client/api/journal/__init__.py new file mode 100644 index 00000000..c9921b5f --- /dev/null +++ b/kindred-sdk/personal_crm_client/api/journal/__init__.py @@ -0,0 +1 @@ +""" Contains endpoint functions for accessing the API """ diff --git a/kindred-sdk/personal_crm_client/api/journal/journal_create_journal_entry_route.py b/kindred-sdk/personal_crm_client/api/journal/journal_create_journal_entry_route.py new file mode 100644 index 00000000..c45e7b7b --- /dev/null +++ b/kindred-sdk/personal_crm_client/api/journal/journal_create_journal_entry_route.py @@ -0,0 +1,195 @@ +from http import HTTPStatus +from typing import Any, cast +from urllib.parse import quote + +import httpx + +from ...client import AuthenticatedClient, Client +from ...types import Response, UNSET +from ... import errors + +from ...models.http_validation_error import HTTPValidationError +from ...models.journal_entry_create import JournalEntryCreate +from ...models.journal_entry_public import JournalEntryPublic +from typing import cast + + + +def _get_kwargs( + *, + body: JournalEntryCreate, + +) -> dict[str, Any]: + headers: dict[str, Any] = {} + + + + + + + _kwargs: dict[str, Any] = { + "method": "post", + "url": "/api/v1/journal/", + } + + _kwargs["json"] = body.to_dict() + + + headers["Content-Type"] = "application/json" + + _kwargs["headers"] = headers + return _kwargs + + + +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> HTTPValidationError | JournalEntryPublic | None: + if response.status_code == 200: + response_200 = JournalEntryPublic.from_dict(response.json()) + + + + return response_200 + + if response.status_code == 422: + response_422 = HTTPValidationError.from_dict(response.json()) + + + + return response_422 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[HTTPValidationError | JournalEntryPublic]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + *, + client: AuthenticatedClient, + body: JournalEntryCreate, + +) -> Response[HTTPValidationError | JournalEntryPublic]: + """ Create Journal Entry Route + + Create a new journal entry. + + Args: + body (JournalEntryCreate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[HTTPValidationError | JournalEntryPublic] + """ + + + kwargs = _get_kwargs( + body=body, + + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + +def sync( + *, + client: AuthenticatedClient, + body: JournalEntryCreate, + +) -> HTTPValidationError | JournalEntryPublic | None: + """ Create Journal Entry Route + + Create a new journal entry. + + Args: + body (JournalEntryCreate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + HTTPValidationError | JournalEntryPublic + """ + + + return sync_detailed( + client=client, +body=body, + + ).parsed + +async def asyncio_detailed( + *, + client: AuthenticatedClient, + body: JournalEntryCreate, + +) -> Response[HTTPValidationError | JournalEntryPublic]: + """ Create Journal Entry Route + + Create a new journal entry. + + Args: + body (JournalEntryCreate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[HTTPValidationError | JournalEntryPublic] + """ + + + kwargs = _get_kwargs( + body=body, + + ) + + response = await client.get_async_httpx_client().request( + **kwargs + ) + + return _build_response(client=client, response=response) + +async def asyncio( + *, + client: AuthenticatedClient, + body: JournalEntryCreate, + +) -> HTTPValidationError | JournalEntryPublic | None: + """ Create Journal Entry Route + + Create a new journal entry. + + Args: + body (JournalEntryCreate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + HTTPValidationError | JournalEntryPublic + """ + + + return (await asyncio_detailed( + client=client, +body=body, + + )).parsed diff --git a/kindred-sdk/personal_crm_client/api/journal/journal_delete_journal_entry.py b/kindred-sdk/personal_crm_client/api/journal/journal_delete_journal_entry.py new file mode 100644 index 00000000..9b02ef3f --- /dev/null +++ b/kindred-sdk/personal_crm_client/api/journal/journal_delete_journal_entry.py @@ -0,0 +1,184 @@ +from http import HTTPStatus +from typing import Any, cast +from urllib.parse import quote + +import httpx + +from ...client import AuthenticatedClient, Client +from ...types import Response, UNSET +from ... import errors + +from ...models.http_validation_error import HTTPValidationError +from typing import cast +from uuid import UUID + + + +def _get_kwargs( + entry_id: UUID, + +) -> dict[str, Any]: + + + + + + + _kwargs: dict[str, Any] = { + "method": "delete", + "url": "/api/v1/journal/{entry_id}".format(entry_id=quote(str(entry_id), safe=""),), + } + + + return _kwargs + + + +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Any | HTTPValidationError | None: + if response.status_code == 200: + response_200 = response.json() + return response_200 + + if response.status_code == 422: + response_422 = HTTPValidationError.from_dict(response.json()) + + + + return response_422 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[Any | HTTPValidationError]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + entry_id: UUID, + *, + client: AuthenticatedClient, + +) -> Response[Any | HTTPValidationError]: + """ Delete Journal Entry + + Delete a journal entry. + + Args: + entry_id (UUID): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Any | HTTPValidationError] + """ + + + kwargs = _get_kwargs( + entry_id=entry_id, + + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + +def sync( + entry_id: UUID, + *, + client: AuthenticatedClient, + +) -> Any | HTTPValidationError | None: + """ Delete Journal Entry + + Delete a journal entry. + + Args: + entry_id (UUID): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Any | HTTPValidationError + """ + + + return sync_detailed( + entry_id=entry_id, +client=client, + + ).parsed + +async def asyncio_detailed( + entry_id: UUID, + *, + client: AuthenticatedClient, + +) -> Response[Any | HTTPValidationError]: + """ Delete Journal Entry + + Delete a journal entry. + + Args: + entry_id (UUID): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Any | HTTPValidationError] + """ + + + kwargs = _get_kwargs( + entry_id=entry_id, + + ) + + response = await client.get_async_httpx_client().request( + **kwargs + ) + + return _build_response(client=client, response=response) + +async def asyncio( + entry_id: UUID, + *, + client: AuthenticatedClient, + +) -> Any | HTTPValidationError | None: + """ Delete Journal Entry + + Delete a journal entry. + + Args: + entry_id (UUID): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Any | HTTPValidationError + """ + + + return (await asyncio_detailed( + entry_id=entry_id, +client=client, + + )).parsed diff --git a/kindred-sdk/personal_crm_client/api/journal/journal_list_journal_entries.py b/kindred-sdk/personal_crm_client/api/journal/journal_list_journal_entries.py new file mode 100644 index 00000000..5edf33c4 --- /dev/null +++ b/kindred-sdk/personal_crm_client/api/journal/journal_list_journal_entries.py @@ -0,0 +1,211 @@ +from http import HTTPStatus +from typing import Any, cast +from urllib.parse import quote + +import httpx + +from ...client import AuthenticatedClient, Client +from ...types import Response, UNSET +from ... import errors + +from ...models.http_validation_error import HTTPValidationError +from ...models.journal_entries_public import JournalEntriesPublic +from ...types import UNSET, Unset +from typing import cast + + + +def _get_kwargs( + *, + skip: int | Unset = 0, + limit: int | Unset = 100, + +) -> dict[str, Any]: + + + + + params: dict[str, Any] = {} + + params["skip"] = skip + + params["limit"] = limit + + + params = {k: v for k, v in params.items() if v is not UNSET and v is not None} + + + _kwargs: dict[str, Any] = { + "method": "get", + "url": "/api/v1/journal/", + "params": params, + } + + + return _kwargs + + + +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> HTTPValidationError | JournalEntriesPublic | None: + if response.status_code == 200: + response_200 = JournalEntriesPublic.from_dict(response.json()) + + + + return response_200 + + if response.status_code == 422: + response_422 = HTTPValidationError.from_dict(response.json()) + + + + return response_422 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[HTTPValidationError | JournalEntriesPublic]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + *, + client: AuthenticatedClient, + skip: int | Unset = 0, + limit: int | Unset = 100, + +) -> Response[HTTPValidationError | JournalEntriesPublic]: + """ List Journal Entries + + List journal entries for the current user. + + Args: + skip (int | Unset): Default: 0. + limit (int | Unset): Default: 100. + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[HTTPValidationError | JournalEntriesPublic] + """ + + + kwargs = _get_kwargs( + skip=skip, +limit=limit, + + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + +def sync( + *, + client: AuthenticatedClient, + skip: int | Unset = 0, + limit: int | Unset = 100, + +) -> HTTPValidationError | JournalEntriesPublic | None: + """ List Journal Entries + + List journal entries for the current user. + + Args: + skip (int | Unset): Default: 0. + limit (int | Unset): Default: 100. + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + HTTPValidationError | JournalEntriesPublic + """ + + + return sync_detailed( + client=client, +skip=skip, +limit=limit, + + ).parsed + +async def asyncio_detailed( + *, + client: AuthenticatedClient, + skip: int | Unset = 0, + limit: int | Unset = 100, + +) -> Response[HTTPValidationError | JournalEntriesPublic]: + """ List Journal Entries + + List journal entries for the current user. + + Args: + skip (int | Unset): Default: 0. + limit (int | Unset): Default: 100. + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[HTTPValidationError | JournalEntriesPublic] + """ + + + kwargs = _get_kwargs( + skip=skip, +limit=limit, + + ) + + response = await client.get_async_httpx_client().request( + **kwargs + ) + + return _build_response(client=client, response=response) + +async def asyncio( + *, + client: AuthenticatedClient, + skip: int | Unset = 0, + limit: int | Unset = 100, + +) -> HTTPValidationError | JournalEntriesPublic | None: + """ List Journal Entries + + List journal entries for the current user. + + Args: + skip (int | Unset): Default: 0. + limit (int | Unset): Default: 100. + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + HTTPValidationError | JournalEntriesPublic + """ + + + return (await asyncio_detailed( + client=client, +skip=skip, +limit=limit, + + )).parsed diff --git a/kindred-sdk/personal_crm_client/api/journal/journal_update_journal_entry.py b/kindred-sdk/personal_crm_client/api/journal/journal_update_journal_entry.py new file mode 100644 index 00000000..2d0744e4 --- /dev/null +++ b/kindred-sdk/personal_crm_client/api/journal/journal_update_journal_entry.py @@ -0,0 +1,209 @@ +from http import HTTPStatus +from typing import Any, cast +from urllib.parse import quote + +import httpx + +from ...client import AuthenticatedClient, Client +from ...types import Response, UNSET +from ... import errors + +from ...models.http_validation_error import HTTPValidationError +from ...models.journal_entry_public import JournalEntryPublic +from ...models.journal_entry_update import JournalEntryUpdate +from typing import cast +from uuid import UUID + + + +def _get_kwargs( + entry_id: UUID, + *, + body: JournalEntryUpdate, + +) -> dict[str, Any]: + headers: dict[str, Any] = {} + + + + + + + _kwargs: dict[str, Any] = { + "method": "patch", + "url": "/api/v1/journal/{entry_id}".format(entry_id=quote(str(entry_id), safe=""),), + } + + _kwargs["json"] = body.to_dict() + + + headers["Content-Type"] = "application/json" + + _kwargs["headers"] = headers + return _kwargs + + + +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> HTTPValidationError | JournalEntryPublic | None: + if response.status_code == 200: + response_200 = JournalEntryPublic.from_dict(response.json()) + + + + return response_200 + + if response.status_code == 422: + response_422 = HTTPValidationError.from_dict(response.json()) + + + + return response_422 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[HTTPValidationError | JournalEntryPublic]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + entry_id: UUID, + *, + client: AuthenticatedClient, + body: JournalEntryUpdate, + +) -> Response[HTTPValidationError | JournalEntryPublic]: + """ Update Journal Entry + + Update a journal entry. + + Args: + entry_id (UUID): + body (JournalEntryUpdate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[HTTPValidationError | JournalEntryPublic] + """ + + + kwargs = _get_kwargs( + entry_id=entry_id, +body=body, + + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + +def sync( + entry_id: UUID, + *, + client: AuthenticatedClient, + body: JournalEntryUpdate, + +) -> HTTPValidationError | JournalEntryPublic | None: + """ Update Journal Entry + + Update a journal entry. + + Args: + entry_id (UUID): + body (JournalEntryUpdate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + HTTPValidationError | JournalEntryPublic + """ + + + return sync_detailed( + entry_id=entry_id, +client=client, +body=body, + + ).parsed + +async def asyncio_detailed( + entry_id: UUID, + *, + client: AuthenticatedClient, + body: JournalEntryUpdate, + +) -> Response[HTTPValidationError | JournalEntryPublic]: + """ Update Journal Entry + + Update a journal entry. + + Args: + entry_id (UUID): + body (JournalEntryUpdate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[HTTPValidationError | JournalEntryPublic] + """ + + + kwargs = _get_kwargs( + entry_id=entry_id, +body=body, + + ) + + response = await client.get_async_httpx_client().request( + **kwargs + ) + + return _build_response(client=client, response=response) + +async def asyncio( + entry_id: UUID, + *, + client: AuthenticatedClient, + body: JournalEntryUpdate, + +) -> HTTPValidationError | JournalEntryPublic | None: + """ Update Journal Entry + + Update a journal entry. + + Args: + entry_id (UUID): + body (JournalEntryUpdate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + HTTPValidationError | JournalEntryPublic + """ + + + return (await asyncio_detailed( + entry_id=entry_id, +client=client, +body=body, + + )).parsed diff --git a/kindred-sdk/personal_crm_client/api/life_events/__init__.py b/kindred-sdk/personal_crm_client/api/life_events/__init__.py new file mode 100644 index 00000000..c9921b5f --- /dev/null +++ b/kindred-sdk/personal_crm_client/api/life_events/__init__.py @@ -0,0 +1 @@ +""" Contains endpoint functions for accessing the API """ diff --git a/kindred-sdk/personal_crm_client/api/life_events/life_events_create_life_event_route.py b/kindred-sdk/personal_crm_client/api/life_events/life_events_create_life_event_route.py new file mode 100644 index 00000000..c6c68742 --- /dev/null +++ b/kindred-sdk/personal_crm_client/api/life_events/life_events_create_life_event_route.py @@ -0,0 +1,195 @@ +from http import HTTPStatus +from typing import Any, cast +from urllib.parse import quote + +import httpx + +from ...client import AuthenticatedClient, Client +from ...types import Response, UNSET +from ... import errors + +from ...models.http_validation_error import HTTPValidationError +from ...models.life_event_create import LifeEventCreate +from ...models.life_event_public import LifeEventPublic +from typing import cast + + + +def _get_kwargs( + *, + body: LifeEventCreate, + +) -> dict[str, Any]: + headers: dict[str, Any] = {} + + + + + + + _kwargs: dict[str, Any] = { + "method": "post", + "url": "/api/v1/life-events/", + } + + _kwargs["json"] = body.to_dict() + + + headers["Content-Type"] = "application/json" + + _kwargs["headers"] = headers + return _kwargs + + + +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> HTTPValidationError | LifeEventPublic | None: + if response.status_code == 200: + response_200 = LifeEventPublic.from_dict(response.json()) + + + + return response_200 + + if response.status_code == 422: + response_422 = HTTPValidationError.from_dict(response.json()) + + + + return response_422 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[HTTPValidationError | LifeEventPublic]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + *, + client: AuthenticatedClient, + body: LifeEventCreate, + +) -> Response[HTTPValidationError | LifeEventPublic]: + """ Create Life Event Route + + Create a new life event. + + Args: + body (LifeEventCreate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[HTTPValidationError | LifeEventPublic] + """ + + + kwargs = _get_kwargs( + body=body, + + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + +def sync( + *, + client: AuthenticatedClient, + body: LifeEventCreate, + +) -> HTTPValidationError | LifeEventPublic | None: + """ Create Life Event Route + + Create a new life event. + + Args: + body (LifeEventCreate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + HTTPValidationError | LifeEventPublic + """ + + + return sync_detailed( + client=client, +body=body, + + ).parsed + +async def asyncio_detailed( + *, + client: AuthenticatedClient, + body: LifeEventCreate, + +) -> Response[HTTPValidationError | LifeEventPublic]: + """ Create Life Event Route + + Create a new life event. + + Args: + body (LifeEventCreate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[HTTPValidationError | LifeEventPublic] + """ + + + kwargs = _get_kwargs( + body=body, + + ) + + response = await client.get_async_httpx_client().request( + **kwargs + ) + + return _build_response(client=client, response=response) + +async def asyncio( + *, + client: AuthenticatedClient, + body: LifeEventCreate, + +) -> HTTPValidationError | LifeEventPublic | None: + """ Create Life Event Route + + Create a new life event. + + Args: + body (LifeEventCreate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + HTTPValidationError | LifeEventPublic + """ + + + return (await asyncio_detailed( + client=client, +body=body, + + )).parsed diff --git a/kindred-sdk/personal_crm_client/api/life_events/life_events_delete_life_event.py b/kindred-sdk/personal_crm_client/api/life_events/life_events_delete_life_event.py new file mode 100644 index 00000000..9c4021d8 --- /dev/null +++ b/kindred-sdk/personal_crm_client/api/life_events/life_events_delete_life_event.py @@ -0,0 +1,184 @@ +from http import HTTPStatus +from typing import Any, cast +from urllib.parse import quote + +import httpx + +from ...client import AuthenticatedClient, Client +from ...types import Response, UNSET +from ... import errors + +from ...models.http_validation_error import HTTPValidationError +from typing import cast +from uuid import UUID + + + +def _get_kwargs( + event_id: UUID, + +) -> dict[str, Any]: + + + + + + + _kwargs: dict[str, Any] = { + "method": "delete", + "url": "/api/v1/life-events/{event_id}".format(event_id=quote(str(event_id), safe=""),), + } + + + return _kwargs + + + +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Any | HTTPValidationError | None: + if response.status_code == 200: + response_200 = response.json() + return response_200 + + if response.status_code == 422: + response_422 = HTTPValidationError.from_dict(response.json()) + + + + return response_422 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[Any | HTTPValidationError]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + event_id: UUID, + *, + client: AuthenticatedClient, + +) -> Response[Any | HTTPValidationError]: + """ Delete Life Event + + Delete a life event. + + Args: + event_id (UUID): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Any | HTTPValidationError] + """ + + + kwargs = _get_kwargs( + event_id=event_id, + + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + +def sync( + event_id: UUID, + *, + client: AuthenticatedClient, + +) -> Any | HTTPValidationError | None: + """ Delete Life Event + + Delete a life event. + + Args: + event_id (UUID): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Any | HTTPValidationError + """ + + + return sync_detailed( + event_id=event_id, +client=client, + + ).parsed + +async def asyncio_detailed( + event_id: UUID, + *, + client: AuthenticatedClient, + +) -> Response[Any | HTTPValidationError]: + """ Delete Life Event + + Delete a life event. + + Args: + event_id (UUID): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Any | HTTPValidationError] + """ + + + kwargs = _get_kwargs( + event_id=event_id, + + ) + + response = await client.get_async_httpx_client().request( + **kwargs + ) + + return _build_response(client=client, response=response) + +async def asyncio( + event_id: UUID, + *, + client: AuthenticatedClient, + +) -> Any | HTTPValidationError | None: + """ Delete Life Event + + Delete a life event. + + Args: + event_id (UUID): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Any | HTTPValidationError + """ + + + return (await asyncio_detailed( + event_id=event_id, +client=client, + + )).parsed diff --git a/kindred-sdk/personal_crm_client/api/life_events/life_events_list_life_events.py b/kindred-sdk/personal_crm_client/api/life_events/life_events_list_life_events.py new file mode 100644 index 00000000..1046786a --- /dev/null +++ b/kindred-sdk/personal_crm_client/api/life_events/life_events_list_life_events.py @@ -0,0 +1,188 @@ +from http import HTTPStatus +from typing import Any, cast +from urllib.parse import quote + +import httpx + +from ...client import AuthenticatedClient, Client +from ...types import Response, UNSET +from ... import errors + +from ...models.http_validation_error import HTTPValidationError +from ...models.life_events_public import LifeEventsPublic +from typing import cast +from uuid import UUID + + + +def _get_kwargs( + contact_id: UUID, + +) -> dict[str, Any]: + + + + + + + _kwargs: dict[str, Any] = { + "method": "get", + "url": "/api/v1/life-events/contact/{contact_id}".format(contact_id=quote(str(contact_id), safe=""),), + } + + + return _kwargs + + + +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> HTTPValidationError | LifeEventsPublic | None: + if response.status_code == 200: + response_200 = LifeEventsPublic.from_dict(response.json()) + + + + return response_200 + + if response.status_code == 422: + response_422 = HTTPValidationError.from_dict(response.json()) + + + + return response_422 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[HTTPValidationError | LifeEventsPublic]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + contact_id: UUID, + *, + client: AuthenticatedClient, + +) -> Response[HTTPValidationError | LifeEventsPublic]: + """ List Life Events + + List life events for a contact. + + Args: + contact_id (UUID): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[HTTPValidationError | LifeEventsPublic] + """ + + + kwargs = _get_kwargs( + contact_id=contact_id, + + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + +def sync( + contact_id: UUID, + *, + client: AuthenticatedClient, + +) -> HTTPValidationError | LifeEventsPublic | None: + """ List Life Events + + List life events for a contact. + + Args: + contact_id (UUID): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + HTTPValidationError | LifeEventsPublic + """ + + + return sync_detailed( + contact_id=contact_id, +client=client, + + ).parsed + +async def asyncio_detailed( + contact_id: UUID, + *, + client: AuthenticatedClient, + +) -> Response[HTTPValidationError | LifeEventsPublic]: + """ List Life Events + + List life events for a contact. + + Args: + contact_id (UUID): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[HTTPValidationError | LifeEventsPublic] + """ + + + kwargs = _get_kwargs( + contact_id=contact_id, + + ) + + response = await client.get_async_httpx_client().request( + **kwargs + ) + + return _build_response(client=client, response=response) + +async def asyncio( + contact_id: UUID, + *, + client: AuthenticatedClient, + +) -> HTTPValidationError | LifeEventsPublic | None: + """ List Life Events + + List life events for a contact. + + Args: + contact_id (UUID): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + HTTPValidationError | LifeEventsPublic + """ + + + return (await asyncio_detailed( + contact_id=contact_id, +client=client, + + )).parsed diff --git a/kindred-sdk/personal_crm_client/api/life_events/life_events_update_life_event.py b/kindred-sdk/personal_crm_client/api/life_events/life_events_update_life_event.py new file mode 100644 index 00000000..41de5cc7 --- /dev/null +++ b/kindred-sdk/personal_crm_client/api/life_events/life_events_update_life_event.py @@ -0,0 +1,209 @@ +from http import HTTPStatus +from typing import Any, cast +from urllib.parse import quote + +import httpx + +from ...client import AuthenticatedClient, Client +from ...types import Response, UNSET +from ... import errors + +from ...models.http_validation_error import HTTPValidationError +from ...models.life_event_public import LifeEventPublic +from ...models.life_event_update import LifeEventUpdate +from typing import cast +from uuid import UUID + + + +def _get_kwargs( + event_id: UUID, + *, + body: LifeEventUpdate, + +) -> dict[str, Any]: + headers: dict[str, Any] = {} + + + + + + + _kwargs: dict[str, Any] = { + "method": "patch", + "url": "/api/v1/life-events/{event_id}".format(event_id=quote(str(event_id), safe=""),), + } + + _kwargs["json"] = body.to_dict() + + + headers["Content-Type"] = "application/json" + + _kwargs["headers"] = headers + return _kwargs + + + +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> HTTPValidationError | LifeEventPublic | None: + if response.status_code == 200: + response_200 = LifeEventPublic.from_dict(response.json()) + + + + return response_200 + + if response.status_code == 422: + response_422 = HTTPValidationError.from_dict(response.json()) + + + + return response_422 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[HTTPValidationError | LifeEventPublic]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + event_id: UUID, + *, + client: AuthenticatedClient, + body: LifeEventUpdate, + +) -> Response[HTTPValidationError | LifeEventPublic]: + """ Update Life Event + + Update a life event. + + Args: + event_id (UUID): + body (LifeEventUpdate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[HTTPValidationError | LifeEventPublic] + """ + + + kwargs = _get_kwargs( + event_id=event_id, +body=body, + + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + +def sync( + event_id: UUID, + *, + client: AuthenticatedClient, + body: LifeEventUpdate, + +) -> HTTPValidationError | LifeEventPublic | None: + """ Update Life Event + + Update a life event. + + Args: + event_id (UUID): + body (LifeEventUpdate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + HTTPValidationError | LifeEventPublic + """ + + + return sync_detailed( + event_id=event_id, +client=client, +body=body, + + ).parsed + +async def asyncio_detailed( + event_id: UUID, + *, + client: AuthenticatedClient, + body: LifeEventUpdate, + +) -> Response[HTTPValidationError | LifeEventPublic]: + """ Update Life Event + + Update a life event. + + Args: + event_id (UUID): + body (LifeEventUpdate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[HTTPValidationError | LifeEventPublic] + """ + + + kwargs = _get_kwargs( + event_id=event_id, +body=body, + + ) + + response = await client.get_async_httpx_client().request( + **kwargs + ) + + return _build_response(client=client, response=response) + +async def asyncio( + event_id: UUID, + *, + client: AuthenticatedClient, + body: LifeEventUpdate, + +) -> HTTPValidationError | LifeEventPublic | None: + """ Update Life Event + + Update a life event. + + Args: + event_id (UUID): + body (LifeEventUpdate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + HTTPValidationError | LifeEventPublic + """ + + + return (await asyncio_detailed( + event_id=event_id, +client=client, +body=body, + + )).parsed diff --git a/kindred-sdk/personal_crm_client/api/login/__init__.py b/kindred-sdk/personal_crm_client/api/login/__init__.py new file mode 100644 index 00000000..c9921b5f --- /dev/null +++ b/kindred-sdk/personal_crm_client/api/login/__init__.py @@ -0,0 +1 @@ +""" Contains endpoint functions for accessing the API """ diff --git a/kindred-sdk/personal_crm_client/api/login/login_login_access_token.py b/kindred-sdk/personal_crm_client/api/login/login_login_access_token.py new file mode 100644 index 00000000..f0ba8702 --- /dev/null +++ b/kindred-sdk/personal_crm_client/api/login/login_login_access_token.py @@ -0,0 +1,194 @@ +from http import HTTPStatus +from typing import Any, cast +from urllib.parse import quote + +import httpx + +from ...client import AuthenticatedClient, Client +from ...types import Response, UNSET +from ... import errors + +from ...models.body_login_login_access_token import BodyLoginLoginAccessToken +from ...models.http_validation_error import HTTPValidationError +from ...models.token import Token +from typing import cast + + + +def _get_kwargs( + *, + body: BodyLoginLoginAccessToken, + +) -> dict[str, Any]: + headers: dict[str, Any] = {} + + + + + + + _kwargs: dict[str, Any] = { + "method": "post", + "url": "/api/v1/login/access-token", + } + + _kwargs["data"] = body.to_dict() + + headers["Content-Type"] = "application/x-www-form-urlencoded" + + _kwargs["headers"] = headers + return _kwargs + + + +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> HTTPValidationError | Token | None: + if response.status_code == 200: + response_200 = Token.from_dict(response.json()) + + + + return response_200 + + if response.status_code == 422: + response_422 = HTTPValidationError.from_dict(response.json()) + + + + return response_422 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[HTTPValidationError | Token]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + *, + client: AuthenticatedClient | Client, + body: BodyLoginLoginAccessToken, + +) -> Response[HTTPValidationError | Token]: + """ Login Access Token + + OAuth2 compatible token login, get an access token for future requests + + Args: + body (BodyLoginLoginAccessToken): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[HTTPValidationError | Token] + """ + + + kwargs = _get_kwargs( + body=body, + + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + +def sync( + *, + client: AuthenticatedClient | Client, + body: BodyLoginLoginAccessToken, + +) -> HTTPValidationError | Token | None: + """ Login Access Token + + OAuth2 compatible token login, get an access token for future requests + + Args: + body (BodyLoginLoginAccessToken): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + HTTPValidationError | Token + """ + + + return sync_detailed( + client=client, +body=body, + + ).parsed + +async def asyncio_detailed( + *, + client: AuthenticatedClient | Client, + body: BodyLoginLoginAccessToken, + +) -> Response[HTTPValidationError | Token]: + """ Login Access Token + + OAuth2 compatible token login, get an access token for future requests + + Args: + body (BodyLoginLoginAccessToken): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[HTTPValidationError | Token] + """ + + + kwargs = _get_kwargs( + body=body, + + ) + + response = await client.get_async_httpx_client().request( + **kwargs + ) + + return _build_response(client=client, response=response) + +async def asyncio( + *, + client: AuthenticatedClient | Client, + body: BodyLoginLoginAccessToken, + +) -> HTTPValidationError | Token | None: + """ Login Access Token + + OAuth2 compatible token login, get an access token for future requests + + Args: + body (BodyLoginLoginAccessToken): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + HTTPValidationError | Token + """ + + + return (await asyncio_detailed( + client=client, +body=body, + + )).parsed diff --git a/kindred-sdk/personal_crm_client/api/login/login_recover_password.py b/kindred-sdk/personal_crm_client/api/login/login_recover_password.py new file mode 100644 index 00000000..fa3efeef --- /dev/null +++ b/kindred-sdk/personal_crm_client/api/login/login_recover_password.py @@ -0,0 +1,187 @@ +from http import HTTPStatus +from typing import Any, cast +from urllib.parse import quote + +import httpx + +from ...client import AuthenticatedClient, Client +from ...types import Response, UNSET +from ... import errors + +from ...models.http_validation_error import HTTPValidationError +from ...models.message import Message +from typing import cast + + + +def _get_kwargs( + email: str, + +) -> dict[str, Any]: + + + + + + + _kwargs: dict[str, Any] = { + "method": "post", + "url": "/api/v1/password-recovery/{email}".format(email=quote(str(email), safe=""),), + } + + + return _kwargs + + + +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> HTTPValidationError | Message | None: + if response.status_code == 200: + response_200 = Message.from_dict(response.json()) + + + + return response_200 + + if response.status_code == 422: + response_422 = HTTPValidationError.from_dict(response.json()) + + + + return response_422 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[HTTPValidationError | Message]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + email: str, + *, + client: AuthenticatedClient | Client, + +) -> Response[HTTPValidationError | Message]: + """ Recover Password + + Password Recovery + + Args: + email (str): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[HTTPValidationError | Message] + """ + + + kwargs = _get_kwargs( + email=email, + + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + +def sync( + email: str, + *, + client: AuthenticatedClient | Client, + +) -> HTTPValidationError | Message | None: + """ Recover Password + + Password Recovery + + Args: + email (str): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + HTTPValidationError | Message + """ + + + return sync_detailed( + email=email, +client=client, + + ).parsed + +async def asyncio_detailed( + email: str, + *, + client: AuthenticatedClient | Client, + +) -> Response[HTTPValidationError | Message]: + """ Recover Password + + Password Recovery + + Args: + email (str): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[HTTPValidationError | Message] + """ + + + kwargs = _get_kwargs( + email=email, + + ) + + response = await client.get_async_httpx_client().request( + **kwargs + ) + + return _build_response(client=client, response=response) + +async def asyncio( + email: str, + *, + client: AuthenticatedClient | Client, + +) -> HTTPValidationError | Message | None: + """ Recover Password + + Password Recovery + + Args: + email (str): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + HTTPValidationError | Message + """ + + + return (await asyncio_detailed( + email=email, +client=client, + + )).parsed diff --git a/kindred-sdk/personal_crm_client/api/login/login_recover_password_html_content.py b/kindred-sdk/personal_crm_client/api/login/login_recover_password_html_content.py new file mode 100644 index 00000000..ef8c7643 --- /dev/null +++ b/kindred-sdk/personal_crm_client/api/login/login_recover_password_html_content.py @@ -0,0 +1,183 @@ +from http import HTTPStatus +from typing import Any, cast +from urllib.parse import quote + +import httpx + +from ...client import AuthenticatedClient, Client +from ...types import Response, UNSET +from ... import errors + +from ...models.http_validation_error import HTTPValidationError +from typing import cast + + + +def _get_kwargs( + email: str, + +) -> dict[str, Any]: + + + + + + + _kwargs: dict[str, Any] = { + "method": "post", + "url": "/api/v1/password-recovery-html-content/{email}".format(email=quote(str(email), safe=""),), + } + + + return _kwargs + + + +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> HTTPValidationError | str | None: + if response.status_code == 200: + response_200 = response.text + return response_200 + + if response.status_code == 422: + response_422 = HTTPValidationError.from_dict(response.json()) + + + + return response_422 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[HTTPValidationError | str]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + email: str, + *, + client: AuthenticatedClient, + +) -> Response[HTTPValidationError | str]: + """ Recover Password Html Content + + HTML Content for Password Recovery + + Args: + email (str): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[HTTPValidationError | str] + """ + + + kwargs = _get_kwargs( + email=email, + + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + +def sync( + email: str, + *, + client: AuthenticatedClient, + +) -> HTTPValidationError | str | None: + """ Recover Password Html Content + + HTML Content for Password Recovery + + Args: + email (str): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + HTTPValidationError | str + """ + + + return sync_detailed( + email=email, +client=client, + + ).parsed + +async def asyncio_detailed( + email: str, + *, + client: AuthenticatedClient, + +) -> Response[HTTPValidationError | str]: + """ Recover Password Html Content + + HTML Content for Password Recovery + + Args: + email (str): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[HTTPValidationError | str] + """ + + + kwargs = _get_kwargs( + email=email, + + ) + + response = await client.get_async_httpx_client().request( + **kwargs + ) + + return _build_response(client=client, response=response) + +async def asyncio( + email: str, + *, + client: AuthenticatedClient, + +) -> HTTPValidationError | str | None: + """ Recover Password Html Content + + HTML Content for Password Recovery + + Args: + email (str): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + HTTPValidationError | str + """ + + + return (await asyncio_detailed( + email=email, +client=client, + + )).parsed diff --git a/kindred-sdk/personal_crm_client/api/login/login_reset_password.py b/kindred-sdk/personal_crm_client/api/login/login_reset_password.py new file mode 100644 index 00000000..91f700e5 --- /dev/null +++ b/kindred-sdk/personal_crm_client/api/login/login_reset_password.py @@ -0,0 +1,195 @@ +from http import HTTPStatus +from typing import Any, cast +from urllib.parse import quote + +import httpx + +from ...client import AuthenticatedClient, Client +from ...types import Response, UNSET +from ... import errors + +from ...models.http_validation_error import HTTPValidationError +from ...models.message import Message +from ...models.new_password import NewPassword +from typing import cast + + + +def _get_kwargs( + *, + body: NewPassword, + +) -> dict[str, Any]: + headers: dict[str, Any] = {} + + + + + + + _kwargs: dict[str, Any] = { + "method": "post", + "url": "/api/v1/reset-password/", + } + + _kwargs["json"] = body.to_dict() + + + headers["Content-Type"] = "application/json" + + _kwargs["headers"] = headers + return _kwargs + + + +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> HTTPValidationError | Message | None: + if response.status_code == 200: + response_200 = Message.from_dict(response.json()) + + + + return response_200 + + if response.status_code == 422: + response_422 = HTTPValidationError.from_dict(response.json()) + + + + return response_422 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[HTTPValidationError | Message]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + *, + client: AuthenticatedClient | Client, + body: NewPassword, + +) -> Response[HTTPValidationError | Message]: + """ Reset Password + + Reset password + + Args: + body (NewPassword): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[HTTPValidationError | Message] + """ + + + kwargs = _get_kwargs( + body=body, + + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + +def sync( + *, + client: AuthenticatedClient | Client, + body: NewPassword, + +) -> HTTPValidationError | Message | None: + """ Reset Password + + Reset password + + Args: + body (NewPassword): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + HTTPValidationError | Message + """ + + + return sync_detailed( + client=client, +body=body, + + ).parsed + +async def asyncio_detailed( + *, + client: AuthenticatedClient | Client, + body: NewPassword, + +) -> Response[HTTPValidationError | Message]: + """ Reset Password + + Reset password + + Args: + body (NewPassword): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[HTTPValidationError | Message] + """ + + + kwargs = _get_kwargs( + body=body, + + ) + + response = await client.get_async_httpx_client().request( + **kwargs + ) + + return _build_response(client=client, response=response) + +async def asyncio( + *, + client: AuthenticatedClient | Client, + body: NewPassword, + +) -> HTTPValidationError | Message | None: + """ Reset Password + + Reset password + + Args: + body (NewPassword): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + HTTPValidationError | Message + """ + + + return (await asyncio_detailed( + client=client, +body=body, + + )).parsed diff --git a/kindred-sdk/personal_crm_client/api/login/login_test_token.py b/kindred-sdk/personal_crm_client/api/login/login_test_token.py new file mode 100644 index 00000000..4a87d2c7 --- /dev/null +++ b/kindred-sdk/personal_crm_client/api/login/login_test_token.py @@ -0,0 +1,158 @@ +from http import HTTPStatus +from typing import Any, cast +from urllib.parse import quote + +import httpx + +from ...client import AuthenticatedClient, Client +from ...types import Response, UNSET +from ... import errors + +from ...models.user_public import UserPublic +from typing import cast + + + +def _get_kwargs( + +) -> dict[str, Any]: + + + + + + + _kwargs: dict[str, Any] = { + "method": "post", + "url": "/api/v1/login/test-token", + } + + + return _kwargs + + + +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> UserPublic | None: + if response.status_code == 200: + response_200 = UserPublic.from_dict(response.json()) + + + + return response_200 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[UserPublic]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + *, + client: AuthenticatedClient, + +) -> Response[UserPublic]: + """ Test Token + + Test access token + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[UserPublic] + """ + + + kwargs = _get_kwargs( + + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + +def sync( + *, + client: AuthenticatedClient, + +) -> UserPublic | None: + """ Test Token + + Test access token + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + UserPublic + """ + + + return sync_detailed( + client=client, + + ).parsed + +async def asyncio_detailed( + *, + client: AuthenticatedClient, + +) -> Response[UserPublic]: + """ Test Token + + Test access token + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[UserPublic] + """ + + + kwargs = _get_kwargs( + + ) + + response = await client.get_async_httpx_client().request( + **kwargs + ) + + return _build_response(client=client, response=response) + +async def asyncio( + *, + client: AuthenticatedClient, + +) -> UserPublic | None: + """ Test Token + + Test access token + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + UserPublic + """ + + + return (await asyncio_detailed( + client=client, + + )).parsed diff --git a/kindred-sdk/personal_crm_client/api/media_recommendations/__init__.py b/kindred-sdk/personal_crm_client/api/media_recommendations/__init__.py new file mode 100644 index 00000000..c9921b5f --- /dev/null +++ b/kindred-sdk/personal_crm_client/api/media_recommendations/__init__.py @@ -0,0 +1 @@ +""" Contains endpoint functions for accessing the API """ diff --git a/kindred-sdk/personal_crm_client/api/media_recommendations/media_recommendations_create_media_recommendation_route.py b/kindred-sdk/personal_crm_client/api/media_recommendations/media_recommendations_create_media_recommendation_route.py new file mode 100644 index 00000000..e71bc041 --- /dev/null +++ b/kindred-sdk/personal_crm_client/api/media_recommendations/media_recommendations_create_media_recommendation_route.py @@ -0,0 +1,195 @@ +from http import HTTPStatus +from typing import Any, cast +from urllib.parse import quote + +import httpx + +from ...client import AuthenticatedClient, Client +from ...types import Response, UNSET +from ... import errors + +from ...models.http_validation_error import HTTPValidationError +from ...models.media_recommendation_create import MediaRecommendationCreate +from ...models.media_recommendation_public import MediaRecommendationPublic +from typing import cast + + + +def _get_kwargs( + *, + body: MediaRecommendationCreate, + +) -> dict[str, Any]: + headers: dict[str, Any] = {} + + + + + + + _kwargs: dict[str, Any] = { + "method": "post", + "url": "/api/v1/media-recommendations/", + } + + _kwargs["json"] = body.to_dict() + + + headers["Content-Type"] = "application/json" + + _kwargs["headers"] = headers + return _kwargs + + + +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> HTTPValidationError | MediaRecommendationPublic | None: + if response.status_code == 200: + response_200 = MediaRecommendationPublic.from_dict(response.json()) + + + + return response_200 + + if response.status_code == 422: + response_422 = HTTPValidationError.from_dict(response.json()) + + + + return response_422 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[HTTPValidationError | MediaRecommendationPublic]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + *, + client: AuthenticatedClient, + body: MediaRecommendationCreate, + +) -> Response[HTTPValidationError | MediaRecommendationPublic]: + """ Create Media Recommendation Route + + Create a new media recommendation. + + Args: + body (MediaRecommendationCreate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[HTTPValidationError | MediaRecommendationPublic] + """ + + + kwargs = _get_kwargs( + body=body, + + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + +def sync( + *, + client: AuthenticatedClient, + body: MediaRecommendationCreate, + +) -> HTTPValidationError | MediaRecommendationPublic | None: + """ Create Media Recommendation Route + + Create a new media recommendation. + + Args: + body (MediaRecommendationCreate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + HTTPValidationError | MediaRecommendationPublic + """ + + + return sync_detailed( + client=client, +body=body, + + ).parsed + +async def asyncio_detailed( + *, + client: AuthenticatedClient, + body: MediaRecommendationCreate, + +) -> Response[HTTPValidationError | MediaRecommendationPublic]: + """ Create Media Recommendation Route + + Create a new media recommendation. + + Args: + body (MediaRecommendationCreate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[HTTPValidationError | MediaRecommendationPublic] + """ + + + kwargs = _get_kwargs( + body=body, + + ) + + response = await client.get_async_httpx_client().request( + **kwargs + ) + + return _build_response(client=client, response=response) + +async def asyncio( + *, + client: AuthenticatedClient, + body: MediaRecommendationCreate, + +) -> HTTPValidationError | MediaRecommendationPublic | None: + """ Create Media Recommendation Route + + Create a new media recommendation. + + Args: + body (MediaRecommendationCreate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + HTTPValidationError | MediaRecommendationPublic + """ + + + return (await asyncio_detailed( + client=client, +body=body, + + )).parsed diff --git a/kindred-sdk/personal_crm_client/api/media_recommendations/media_recommendations_delete_media_recommendation.py b/kindred-sdk/personal_crm_client/api/media_recommendations/media_recommendations_delete_media_recommendation.py new file mode 100644 index 00000000..634ea53c --- /dev/null +++ b/kindred-sdk/personal_crm_client/api/media_recommendations/media_recommendations_delete_media_recommendation.py @@ -0,0 +1,184 @@ +from http import HTTPStatus +from typing import Any, cast +from urllib.parse import quote + +import httpx + +from ...client import AuthenticatedClient, Client +from ...types import Response, UNSET +from ... import errors + +from ...models.http_validation_error import HTTPValidationError +from typing import cast +from uuid import UUID + + + +def _get_kwargs( + rec_id: UUID, + +) -> dict[str, Any]: + + + + + + + _kwargs: dict[str, Any] = { + "method": "delete", + "url": "/api/v1/media-recommendations/{rec_id}".format(rec_id=quote(str(rec_id), safe=""),), + } + + + return _kwargs + + + +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Any | HTTPValidationError | None: + if response.status_code == 200: + response_200 = response.json() + return response_200 + + if response.status_code == 422: + response_422 = HTTPValidationError.from_dict(response.json()) + + + + return response_422 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[Any | HTTPValidationError]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + rec_id: UUID, + *, + client: AuthenticatedClient, + +) -> Response[Any | HTTPValidationError]: + """ Delete Media Recommendation + + Delete a media recommendation. + + Args: + rec_id (UUID): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Any | HTTPValidationError] + """ + + + kwargs = _get_kwargs( + rec_id=rec_id, + + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + +def sync( + rec_id: UUID, + *, + client: AuthenticatedClient, + +) -> Any | HTTPValidationError | None: + """ Delete Media Recommendation + + Delete a media recommendation. + + Args: + rec_id (UUID): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Any | HTTPValidationError + """ + + + return sync_detailed( + rec_id=rec_id, +client=client, + + ).parsed + +async def asyncio_detailed( + rec_id: UUID, + *, + client: AuthenticatedClient, + +) -> Response[Any | HTTPValidationError]: + """ Delete Media Recommendation + + Delete a media recommendation. + + Args: + rec_id (UUID): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Any | HTTPValidationError] + """ + + + kwargs = _get_kwargs( + rec_id=rec_id, + + ) + + response = await client.get_async_httpx_client().request( + **kwargs + ) + + return _build_response(client=client, response=response) + +async def asyncio( + rec_id: UUID, + *, + client: AuthenticatedClient, + +) -> Any | HTTPValidationError | None: + """ Delete Media Recommendation + + Delete a media recommendation. + + Args: + rec_id (UUID): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Any | HTTPValidationError + """ + + + return (await asyncio_detailed( + rec_id=rec_id, +client=client, + + )).parsed diff --git a/kindred-sdk/personal_crm_client/api/media_recommendations/media_recommendations_list_media_recommendations.py b/kindred-sdk/personal_crm_client/api/media_recommendations/media_recommendations_list_media_recommendations.py new file mode 100644 index 00000000..596ba7b8 --- /dev/null +++ b/kindred-sdk/personal_crm_client/api/media_recommendations/media_recommendations_list_media_recommendations.py @@ -0,0 +1,188 @@ +from http import HTTPStatus +from typing import Any, cast +from urllib.parse import quote + +import httpx + +from ...client import AuthenticatedClient, Client +from ...types import Response, UNSET +from ... import errors + +from ...models.http_validation_error import HTTPValidationError +from ...models.media_recommendations_public import MediaRecommendationsPublic +from typing import cast +from uuid import UUID + + + +def _get_kwargs( + contact_id: UUID, + +) -> dict[str, Any]: + + + + + + + _kwargs: dict[str, Any] = { + "method": "get", + "url": "/api/v1/media-recommendations/contact/{contact_id}".format(contact_id=quote(str(contact_id), safe=""),), + } + + + return _kwargs + + + +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> HTTPValidationError | MediaRecommendationsPublic | None: + if response.status_code == 200: + response_200 = MediaRecommendationsPublic.from_dict(response.json()) + + + + return response_200 + + if response.status_code == 422: + response_422 = HTTPValidationError.from_dict(response.json()) + + + + return response_422 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[HTTPValidationError | MediaRecommendationsPublic]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + contact_id: UUID, + *, + client: AuthenticatedClient, + +) -> Response[HTTPValidationError | MediaRecommendationsPublic]: + """ List Media Recommendations + + List media recommendations for a contact. + + Args: + contact_id (UUID): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[HTTPValidationError | MediaRecommendationsPublic] + """ + + + kwargs = _get_kwargs( + contact_id=contact_id, + + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + +def sync( + contact_id: UUID, + *, + client: AuthenticatedClient, + +) -> HTTPValidationError | MediaRecommendationsPublic | None: + """ List Media Recommendations + + List media recommendations for a contact. + + Args: + contact_id (UUID): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + HTTPValidationError | MediaRecommendationsPublic + """ + + + return sync_detailed( + contact_id=contact_id, +client=client, + + ).parsed + +async def asyncio_detailed( + contact_id: UUID, + *, + client: AuthenticatedClient, + +) -> Response[HTTPValidationError | MediaRecommendationsPublic]: + """ List Media Recommendations + + List media recommendations for a contact. + + Args: + contact_id (UUID): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[HTTPValidationError | MediaRecommendationsPublic] + """ + + + kwargs = _get_kwargs( + contact_id=contact_id, + + ) + + response = await client.get_async_httpx_client().request( + **kwargs + ) + + return _build_response(client=client, response=response) + +async def asyncio( + contact_id: UUID, + *, + client: AuthenticatedClient, + +) -> HTTPValidationError | MediaRecommendationsPublic | None: + """ List Media Recommendations + + List media recommendations for a contact. + + Args: + contact_id (UUID): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + HTTPValidationError | MediaRecommendationsPublic + """ + + + return (await asyncio_detailed( + contact_id=contact_id, +client=client, + + )).parsed diff --git a/kindred-sdk/personal_crm_client/api/media_recommendations/media_recommendations_update_media_recommendation.py b/kindred-sdk/personal_crm_client/api/media_recommendations/media_recommendations_update_media_recommendation.py new file mode 100644 index 00000000..17fbe4f7 --- /dev/null +++ b/kindred-sdk/personal_crm_client/api/media_recommendations/media_recommendations_update_media_recommendation.py @@ -0,0 +1,209 @@ +from http import HTTPStatus +from typing import Any, cast +from urllib.parse import quote + +import httpx + +from ...client import AuthenticatedClient, Client +from ...types import Response, UNSET +from ... import errors + +from ...models.http_validation_error import HTTPValidationError +from ...models.media_recommendation_public import MediaRecommendationPublic +from ...models.media_recommendation_update import MediaRecommendationUpdate +from typing import cast +from uuid import UUID + + + +def _get_kwargs( + rec_id: UUID, + *, + body: MediaRecommendationUpdate, + +) -> dict[str, Any]: + headers: dict[str, Any] = {} + + + + + + + _kwargs: dict[str, Any] = { + "method": "patch", + "url": "/api/v1/media-recommendations/{rec_id}".format(rec_id=quote(str(rec_id), safe=""),), + } + + _kwargs["json"] = body.to_dict() + + + headers["Content-Type"] = "application/json" + + _kwargs["headers"] = headers + return _kwargs + + + +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> HTTPValidationError | MediaRecommendationPublic | None: + if response.status_code == 200: + response_200 = MediaRecommendationPublic.from_dict(response.json()) + + + + return response_200 + + if response.status_code == 422: + response_422 = HTTPValidationError.from_dict(response.json()) + + + + return response_422 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[HTTPValidationError | MediaRecommendationPublic]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + rec_id: UUID, + *, + client: AuthenticatedClient, + body: MediaRecommendationUpdate, + +) -> Response[HTTPValidationError | MediaRecommendationPublic]: + """ Update Media Recommendation + + Update a media recommendation. + + Args: + rec_id (UUID): + body (MediaRecommendationUpdate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[HTTPValidationError | MediaRecommendationPublic] + """ + + + kwargs = _get_kwargs( + rec_id=rec_id, +body=body, + + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + +def sync( + rec_id: UUID, + *, + client: AuthenticatedClient, + body: MediaRecommendationUpdate, + +) -> HTTPValidationError | MediaRecommendationPublic | None: + """ Update Media Recommendation + + Update a media recommendation. + + Args: + rec_id (UUID): + body (MediaRecommendationUpdate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + HTTPValidationError | MediaRecommendationPublic + """ + + + return sync_detailed( + rec_id=rec_id, +client=client, +body=body, + + ).parsed + +async def asyncio_detailed( + rec_id: UUID, + *, + client: AuthenticatedClient, + body: MediaRecommendationUpdate, + +) -> Response[HTTPValidationError | MediaRecommendationPublic]: + """ Update Media Recommendation + + Update a media recommendation. + + Args: + rec_id (UUID): + body (MediaRecommendationUpdate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[HTTPValidationError | MediaRecommendationPublic] + """ + + + kwargs = _get_kwargs( + rec_id=rec_id, +body=body, + + ) + + response = await client.get_async_httpx_client().request( + **kwargs + ) + + return _build_response(client=client, response=response) + +async def asyncio( + rec_id: UUID, + *, + client: AuthenticatedClient, + body: MediaRecommendationUpdate, + +) -> HTTPValidationError | MediaRecommendationPublic | None: + """ Update Media Recommendation + + Update a media recommendation. + + Args: + rec_id (UUID): + body (MediaRecommendationUpdate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + HTTPValidationError | MediaRecommendationPublic + """ + + + return (await asyncio_detailed( + rec_id=rec_id, +client=client, +body=body, + + )).parsed diff --git a/kindred-sdk/personal_crm_client/api/notes/__init__.py b/kindred-sdk/personal_crm_client/api/notes/__init__.py new file mode 100644 index 00000000..c9921b5f --- /dev/null +++ b/kindred-sdk/personal_crm_client/api/notes/__init__.py @@ -0,0 +1 @@ +""" Contains endpoint functions for accessing the API """ diff --git a/kindred-sdk/personal_crm_client/api/notes/notes_create_note_route.py b/kindred-sdk/personal_crm_client/api/notes/notes_create_note_route.py new file mode 100644 index 00000000..f45f2a4d --- /dev/null +++ b/kindred-sdk/personal_crm_client/api/notes/notes_create_note_route.py @@ -0,0 +1,195 @@ +from http import HTTPStatus +from typing import Any, cast +from urllib.parse import quote + +import httpx + +from ...client import AuthenticatedClient, Client +from ...types import Response, UNSET +from ... import errors + +from ...models.http_validation_error import HTTPValidationError +from ...models.note_create import NoteCreate +from ...models.note_public import NotePublic +from typing import cast + + + +def _get_kwargs( + *, + body: NoteCreate, + +) -> dict[str, Any]: + headers: dict[str, Any] = {} + + + + + + + _kwargs: dict[str, Any] = { + "method": "post", + "url": "/api/v1/notes/", + } + + _kwargs["json"] = body.to_dict() + + + headers["Content-Type"] = "application/json" + + _kwargs["headers"] = headers + return _kwargs + + + +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> HTTPValidationError | NotePublic | None: + if response.status_code == 200: + response_200 = NotePublic.from_dict(response.json()) + + + + return response_200 + + if response.status_code == 422: + response_422 = HTTPValidationError.from_dict(response.json()) + + + + return response_422 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[HTTPValidationError | NotePublic]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + *, + client: AuthenticatedClient, + body: NoteCreate, + +) -> Response[HTTPValidationError | NotePublic]: + """ Create Note Route + + Create a new note. + + Args: + body (NoteCreate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[HTTPValidationError | NotePublic] + """ + + + kwargs = _get_kwargs( + body=body, + + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + +def sync( + *, + client: AuthenticatedClient, + body: NoteCreate, + +) -> HTTPValidationError | NotePublic | None: + """ Create Note Route + + Create a new note. + + Args: + body (NoteCreate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + HTTPValidationError | NotePublic + """ + + + return sync_detailed( + client=client, +body=body, + + ).parsed + +async def asyncio_detailed( + *, + client: AuthenticatedClient, + body: NoteCreate, + +) -> Response[HTTPValidationError | NotePublic]: + """ Create Note Route + + Create a new note. + + Args: + body (NoteCreate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[HTTPValidationError | NotePublic] + """ + + + kwargs = _get_kwargs( + body=body, + + ) + + response = await client.get_async_httpx_client().request( + **kwargs + ) + + return _build_response(client=client, response=response) + +async def asyncio( + *, + client: AuthenticatedClient, + body: NoteCreate, + +) -> HTTPValidationError | NotePublic | None: + """ Create Note Route + + Create a new note. + + Args: + body (NoteCreate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + HTTPValidationError | NotePublic + """ + + + return (await asyncio_detailed( + client=client, +body=body, + + )).parsed diff --git a/kindred-sdk/personal_crm_client/api/notes/notes_delete_note.py b/kindred-sdk/personal_crm_client/api/notes/notes_delete_note.py new file mode 100644 index 00000000..30934c93 --- /dev/null +++ b/kindred-sdk/personal_crm_client/api/notes/notes_delete_note.py @@ -0,0 +1,184 @@ +from http import HTTPStatus +from typing import Any, cast +from urllib.parse import quote + +import httpx + +from ...client import AuthenticatedClient, Client +from ...types import Response, UNSET +from ... import errors + +from ...models.http_validation_error import HTTPValidationError +from typing import cast +from uuid import UUID + + + +def _get_kwargs( + note_id: UUID, + +) -> dict[str, Any]: + + + + + + + _kwargs: dict[str, Any] = { + "method": "delete", + "url": "/api/v1/notes/{note_id}".format(note_id=quote(str(note_id), safe=""),), + } + + + return _kwargs + + + +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Any | HTTPValidationError | None: + if response.status_code == 200: + response_200 = response.json() + return response_200 + + if response.status_code == 422: + response_422 = HTTPValidationError.from_dict(response.json()) + + + + return response_422 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[Any | HTTPValidationError]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + note_id: UUID, + *, + client: AuthenticatedClient, + +) -> Response[Any | HTTPValidationError]: + """ Delete Note + + Delete a note. + + Args: + note_id (UUID): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Any | HTTPValidationError] + """ + + + kwargs = _get_kwargs( + note_id=note_id, + + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + +def sync( + note_id: UUID, + *, + client: AuthenticatedClient, + +) -> Any | HTTPValidationError | None: + """ Delete Note + + Delete a note. + + Args: + note_id (UUID): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Any | HTTPValidationError + """ + + + return sync_detailed( + note_id=note_id, +client=client, + + ).parsed + +async def asyncio_detailed( + note_id: UUID, + *, + client: AuthenticatedClient, + +) -> Response[Any | HTTPValidationError]: + """ Delete Note + + Delete a note. + + Args: + note_id (UUID): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Any | HTTPValidationError] + """ + + + kwargs = _get_kwargs( + note_id=note_id, + + ) + + response = await client.get_async_httpx_client().request( + **kwargs + ) + + return _build_response(client=client, response=response) + +async def asyncio( + note_id: UUID, + *, + client: AuthenticatedClient, + +) -> Any | HTTPValidationError | None: + """ Delete Note + + Delete a note. + + Args: + note_id (UUID): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Any | HTTPValidationError + """ + + + return (await asyncio_detailed( + note_id=note_id, +client=client, + + )).parsed diff --git a/kindred-sdk/personal_crm_client/api/notes/notes_list_notes.py b/kindred-sdk/personal_crm_client/api/notes/notes_list_notes.py new file mode 100644 index 00000000..10756123 --- /dev/null +++ b/kindred-sdk/personal_crm_client/api/notes/notes_list_notes.py @@ -0,0 +1,225 @@ +from http import HTTPStatus +from typing import Any, cast +from urllib.parse import quote + +import httpx + +from ...client import AuthenticatedClient, Client +from ...types import Response, UNSET +from ... import errors + +from ...models.http_validation_error import HTTPValidationError +from ...models.notes_public import NotesPublic +from ...types import UNSET, Unset +from typing import cast +from uuid import UUID + + + +def _get_kwargs( + contact_id: UUID, + *, + skip: int | Unset = 0, + limit: int | Unset = 100, + +) -> dict[str, Any]: + + + + + params: dict[str, Any] = {} + + params["skip"] = skip + + params["limit"] = limit + + + params = {k: v for k, v in params.items() if v is not UNSET and v is not None} + + + _kwargs: dict[str, Any] = { + "method": "get", + "url": "/api/v1/notes/contact/{contact_id}".format(contact_id=quote(str(contact_id), safe=""),), + "params": params, + } + + + return _kwargs + + + +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> HTTPValidationError | NotesPublic | None: + if response.status_code == 200: + response_200 = NotesPublic.from_dict(response.json()) + + + + return response_200 + + if response.status_code == 422: + response_422 = HTTPValidationError.from_dict(response.json()) + + + + return response_422 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[HTTPValidationError | NotesPublic]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + contact_id: UUID, + *, + client: AuthenticatedClient, + skip: int | Unset = 0, + limit: int | Unset = 100, + +) -> Response[HTTPValidationError | NotesPublic]: + """ List Notes + + List notes for a contact. + + Args: + contact_id (UUID): + skip (int | Unset): Default: 0. + limit (int | Unset): Default: 100. + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[HTTPValidationError | NotesPublic] + """ + + + kwargs = _get_kwargs( + contact_id=contact_id, +skip=skip, +limit=limit, + + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + +def sync( + contact_id: UUID, + *, + client: AuthenticatedClient, + skip: int | Unset = 0, + limit: int | Unset = 100, + +) -> HTTPValidationError | NotesPublic | None: + """ List Notes + + List notes for a contact. + + Args: + contact_id (UUID): + skip (int | Unset): Default: 0. + limit (int | Unset): Default: 100. + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + HTTPValidationError | NotesPublic + """ + + + return sync_detailed( + contact_id=contact_id, +client=client, +skip=skip, +limit=limit, + + ).parsed + +async def asyncio_detailed( + contact_id: UUID, + *, + client: AuthenticatedClient, + skip: int | Unset = 0, + limit: int | Unset = 100, + +) -> Response[HTTPValidationError | NotesPublic]: + """ List Notes + + List notes for a contact. + + Args: + contact_id (UUID): + skip (int | Unset): Default: 0. + limit (int | Unset): Default: 100. + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[HTTPValidationError | NotesPublic] + """ + + + kwargs = _get_kwargs( + contact_id=contact_id, +skip=skip, +limit=limit, + + ) + + response = await client.get_async_httpx_client().request( + **kwargs + ) + + return _build_response(client=client, response=response) + +async def asyncio( + contact_id: UUID, + *, + client: AuthenticatedClient, + skip: int | Unset = 0, + limit: int | Unset = 100, + +) -> HTTPValidationError | NotesPublic | None: + """ List Notes + + List notes for a contact. + + Args: + contact_id (UUID): + skip (int | Unset): Default: 0. + limit (int | Unset): Default: 100. + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + HTTPValidationError | NotesPublic + """ + + + return (await asyncio_detailed( + contact_id=contact_id, +client=client, +skip=skip, +limit=limit, + + )).parsed diff --git a/kindred-sdk/personal_crm_client/api/notes/notes_update_note_route.py b/kindred-sdk/personal_crm_client/api/notes/notes_update_note_route.py new file mode 100644 index 00000000..0c46ae01 --- /dev/null +++ b/kindred-sdk/personal_crm_client/api/notes/notes_update_note_route.py @@ -0,0 +1,209 @@ +from http import HTTPStatus +from typing import Any, cast +from urllib.parse import quote + +import httpx + +from ...client import AuthenticatedClient, Client +from ...types import Response, UNSET +from ... import errors + +from ...models.http_validation_error import HTTPValidationError +from ...models.note_public import NotePublic +from ...models.note_update import NoteUpdate +from typing import cast +from uuid import UUID + + + +def _get_kwargs( + note_id: UUID, + *, + body: NoteUpdate, + +) -> dict[str, Any]: + headers: dict[str, Any] = {} + + + + + + + _kwargs: dict[str, Any] = { + "method": "patch", + "url": "/api/v1/notes/{note_id}".format(note_id=quote(str(note_id), safe=""),), + } + + _kwargs["json"] = body.to_dict() + + + headers["Content-Type"] = "application/json" + + _kwargs["headers"] = headers + return _kwargs + + + +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> HTTPValidationError | NotePublic | None: + if response.status_code == 200: + response_200 = NotePublic.from_dict(response.json()) + + + + return response_200 + + if response.status_code == 422: + response_422 = HTTPValidationError.from_dict(response.json()) + + + + return response_422 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[HTTPValidationError | NotePublic]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + note_id: UUID, + *, + client: AuthenticatedClient, + body: NoteUpdate, + +) -> Response[HTTPValidationError | NotePublic]: + """ Update Note Route + + Update a note. + + Args: + note_id (UUID): + body (NoteUpdate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[HTTPValidationError | NotePublic] + """ + + + kwargs = _get_kwargs( + note_id=note_id, +body=body, + + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + +def sync( + note_id: UUID, + *, + client: AuthenticatedClient, + body: NoteUpdate, + +) -> HTTPValidationError | NotePublic | None: + """ Update Note Route + + Update a note. + + Args: + note_id (UUID): + body (NoteUpdate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + HTTPValidationError | NotePublic + """ + + + return sync_detailed( + note_id=note_id, +client=client, +body=body, + + ).parsed + +async def asyncio_detailed( + note_id: UUID, + *, + client: AuthenticatedClient, + body: NoteUpdate, + +) -> Response[HTTPValidationError | NotePublic]: + """ Update Note Route + + Update a note. + + Args: + note_id (UUID): + body (NoteUpdate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[HTTPValidationError | NotePublic] + """ + + + kwargs = _get_kwargs( + note_id=note_id, +body=body, + + ) + + response = await client.get_async_httpx_client().request( + **kwargs + ) + + return _build_response(client=client, response=response) + +async def asyncio( + note_id: UUID, + *, + client: AuthenticatedClient, + body: NoteUpdate, + +) -> HTTPValidationError | NotePublic | None: + """ Update Note Route + + Update a note. + + Args: + note_id (UUID): + body (NoteUpdate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + HTTPValidationError | NotePublic + """ + + + return (await asyncio_detailed( + note_id=note_id, +client=client, +body=body, + + )).parsed diff --git a/kindred-sdk/personal_crm_client/api/pets/__init__.py b/kindred-sdk/personal_crm_client/api/pets/__init__.py new file mode 100644 index 00000000..c9921b5f --- /dev/null +++ b/kindred-sdk/personal_crm_client/api/pets/__init__.py @@ -0,0 +1 @@ +""" Contains endpoint functions for accessing the API """ diff --git a/kindred-sdk/personal_crm_client/api/pets/pets_create_pet_route.py b/kindred-sdk/personal_crm_client/api/pets/pets_create_pet_route.py new file mode 100644 index 00000000..311d88eb --- /dev/null +++ b/kindred-sdk/personal_crm_client/api/pets/pets_create_pet_route.py @@ -0,0 +1,195 @@ +from http import HTTPStatus +from typing import Any, cast +from urllib.parse import quote + +import httpx + +from ...client import AuthenticatedClient, Client +from ...types import Response, UNSET +from ... import errors + +from ...models.http_validation_error import HTTPValidationError +from ...models.pet_create import PetCreate +from ...models.pet_public import PetPublic +from typing import cast + + + +def _get_kwargs( + *, + body: PetCreate, + +) -> dict[str, Any]: + headers: dict[str, Any] = {} + + + + + + + _kwargs: dict[str, Any] = { + "method": "post", + "url": "/api/v1/pets/", + } + + _kwargs["json"] = body.to_dict() + + + headers["Content-Type"] = "application/json" + + _kwargs["headers"] = headers + return _kwargs + + + +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> HTTPValidationError | PetPublic | None: + if response.status_code == 200: + response_200 = PetPublic.from_dict(response.json()) + + + + return response_200 + + if response.status_code == 422: + response_422 = HTTPValidationError.from_dict(response.json()) + + + + return response_422 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[HTTPValidationError | PetPublic]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + *, + client: AuthenticatedClient, + body: PetCreate, + +) -> Response[HTTPValidationError | PetPublic]: + """ Create Pet Route + + Create a new pet. + + Args: + body (PetCreate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[HTTPValidationError | PetPublic] + """ + + + kwargs = _get_kwargs( + body=body, + + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + +def sync( + *, + client: AuthenticatedClient, + body: PetCreate, + +) -> HTTPValidationError | PetPublic | None: + """ Create Pet Route + + Create a new pet. + + Args: + body (PetCreate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + HTTPValidationError | PetPublic + """ + + + return sync_detailed( + client=client, +body=body, + + ).parsed + +async def asyncio_detailed( + *, + client: AuthenticatedClient, + body: PetCreate, + +) -> Response[HTTPValidationError | PetPublic]: + """ Create Pet Route + + Create a new pet. + + Args: + body (PetCreate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[HTTPValidationError | PetPublic] + """ + + + kwargs = _get_kwargs( + body=body, + + ) + + response = await client.get_async_httpx_client().request( + **kwargs + ) + + return _build_response(client=client, response=response) + +async def asyncio( + *, + client: AuthenticatedClient, + body: PetCreate, + +) -> HTTPValidationError | PetPublic | None: + """ Create Pet Route + + Create a new pet. + + Args: + body (PetCreate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + HTTPValidationError | PetPublic + """ + + + return (await asyncio_detailed( + client=client, +body=body, + + )).parsed diff --git a/kindred-sdk/personal_crm_client/api/pets/pets_delete_pet.py b/kindred-sdk/personal_crm_client/api/pets/pets_delete_pet.py new file mode 100644 index 00000000..f011f672 --- /dev/null +++ b/kindred-sdk/personal_crm_client/api/pets/pets_delete_pet.py @@ -0,0 +1,184 @@ +from http import HTTPStatus +from typing import Any, cast +from urllib.parse import quote + +import httpx + +from ...client import AuthenticatedClient, Client +from ...types import Response, UNSET +from ... import errors + +from ...models.http_validation_error import HTTPValidationError +from typing import cast +from uuid import UUID + + + +def _get_kwargs( + pet_id: UUID, + +) -> dict[str, Any]: + + + + + + + _kwargs: dict[str, Any] = { + "method": "delete", + "url": "/api/v1/pets/{pet_id}".format(pet_id=quote(str(pet_id), safe=""),), + } + + + return _kwargs + + + +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Any | HTTPValidationError | None: + if response.status_code == 200: + response_200 = response.json() + return response_200 + + if response.status_code == 422: + response_422 = HTTPValidationError.from_dict(response.json()) + + + + return response_422 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[Any | HTTPValidationError]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + pet_id: UUID, + *, + client: AuthenticatedClient, + +) -> Response[Any | HTTPValidationError]: + """ Delete Pet + + Delete a pet. + + Args: + pet_id (UUID): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Any | HTTPValidationError] + """ + + + kwargs = _get_kwargs( + pet_id=pet_id, + + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + +def sync( + pet_id: UUID, + *, + client: AuthenticatedClient, + +) -> Any | HTTPValidationError | None: + """ Delete Pet + + Delete a pet. + + Args: + pet_id (UUID): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Any | HTTPValidationError + """ + + + return sync_detailed( + pet_id=pet_id, +client=client, + + ).parsed + +async def asyncio_detailed( + pet_id: UUID, + *, + client: AuthenticatedClient, + +) -> Response[Any | HTTPValidationError]: + """ Delete Pet + + Delete a pet. + + Args: + pet_id (UUID): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Any | HTTPValidationError] + """ + + + kwargs = _get_kwargs( + pet_id=pet_id, + + ) + + response = await client.get_async_httpx_client().request( + **kwargs + ) + + return _build_response(client=client, response=response) + +async def asyncio( + pet_id: UUID, + *, + client: AuthenticatedClient, + +) -> Any | HTTPValidationError | None: + """ Delete Pet + + Delete a pet. + + Args: + pet_id (UUID): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Any | HTTPValidationError + """ + + + return (await asyncio_detailed( + pet_id=pet_id, +client=client, + + )).parsed diff --git a/kindred-sdk/personal_crm_client/api/pets/pets_list_pets.py b/kindred-sdk/personal_crm_client/api/pets/pets_list_pets.py new file mode 100644 index 00000000..d1350305 --- /dev/null +++ b/kindred-sdk/personal_crm_client/api/pets/pets_list_pets.py @@ -0,0 +1,184 @@ +from http import HTTPStatus +from typing import Any, cast +from urllib.parse import quote + +import httpx + +from ...client import AuthenticatedClient, Client +from ...types import Response, UNSET +from ... import errors + +from ...models.http_validation_error import HTTPValidationError +from typing import cast +from uuid import UUID + + + +def _get_kwargs( + contact_id: UUID, + +) -> dict[str, Any]: + + + + + + + _kwargs: dict[str, Any] = { + "method": "get", + "url": "/api/v1/pets/contact/{contact_id}".format(contact_id=quote(str(contact_id), safe=""),), + } + + + return _kwargs + + + +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Any | HTTPValidationError | None: + if response.status_code == 200: + response_200 = response.json() + return response_200 + + if response.status_code == 422: + response_422 = HTTPValidationError.from_dict(response.json()) + + + + return response_422 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[Any | HTTPValidationError]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + contact_id: UUID, + *, + client: AuthenticatedClient, + +) -> Response[Any | HTTPValidationError]: + """ List Pets + + List pets for a contact. + + Args: + contact_id (UUID): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Any | HTTPValidationError] + """ + + + kwargs = _get_kwargs( + contact_id=contact_id, + + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + +def sync( + contact_id: UUID, + *, + client: AuthenticatedClient, + +) -> Any | HTTPValidationError | None: + """ List Pets + + List pets for a contact. + + Args: + contact_id (UUID): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Any | HTTPValidationError + """ + + + return sync_detailed( + contact_id=contact_id, +client=client, + + ).parsed + +async def asyncio_detailed( + contact_id: UUID, + *, + client: AuthenticatedClient, + +) -> Response[Any | HTTPValidationError]: + """ List Pets + + List pets for a contact. + + Args: + contact_id (UUID): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Any | HTTPValidationError] + """ + + + kwargs = _get_kwargs( + contact_id=contact_id, + + ) + + response = await client.get_async_httpx_client().request( + **kwargs + ) + + return _build_response(client=client, response=response) + +async def asyncio( + contact_id: UUID, + *, + client: AuthenticatedClient, + +) -> Any | HTTPValidationError | None: + """ List Pets + + List pets for a contact. + + Args: + contact_id (UUID): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Any | HTTPValidationError + """ + + + return (await asyncio_detailed( + contact_id=contact_id, +client=client, + + )).parsed diff --git a/kindred-sdk/personal_crm_client/api/pets/pets_update_pet.py b/kindred-sdk/personal_crm_client/api/pets/pets_update_pet.py new file mode 100644 index 00000000..9095c2db --- /dev/null +++ b/kindred-sdk/personal_crm_client/api/pets/pets_update_pet.py @@ -0,0 +1,209 @@ +from http import HTTPStatus +from typing import Any, cast +from urllib.parse import quote + +import httpx + +from ...client import AuthenticatedClient, Client +from ...types import Response, UNSET +from ... import errors + +from ...models.http_validation_error import HTTPValidationError +from ...models.pet_public import PetPublic +from ...models.pet_update import PetUpdate +from typing import cast +from uuid import UUID + + + +def _get_kwargs( + pet_id: UUID, + *, + body: PetUpdate, + +) -> dict[str, Any]: + headers: dict[str, Any] = {} + + + + + + + _kwargs: dict[str, Any] = { + "method": "patch", + "url": "/api/v1/pets/{pet_id}".format(pet_id=quote(str(pet_id), safe=""),), + } + + _kwargs["json"] = body.to_dict() + + + headers["Content-Type"] = "application/json" + + _kwargs["headers"] = headers + return _kwargs + + + +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> HTTPValidationError | PetPublic | None: + if response.status_code == 200: + response_200 = PetPublic.from_dict(response.json()) + + + + return response_200 + + if response.status_code == 422: + response_422 = HTTPValidationError.from_dict(response.json()) + + + + return response_422 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[HTTPValidationError | PetPublic]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + pet_id: UUID, + *, + client: AuthenticatedClient, + body: PetUpdate, + +) -> Response[HTTPValidationError | PetPublic]: + """ Update Pet + + Update a pet. + + Args: + pet_id (UUID): + body (PetUpdate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[HTTPValidationError | PetPublic] + """ + + + kwargs = _get_kwargs( + pet_id=pet_id, +body=body, + + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + +def sync( + pet_id: UUID, + *, + client: AuthenticatedClient, + body: PetUpdate, + +) -> HTTPValidationError | PetPublic | None: + """ Update Pet + + Update a pet. + + Args: + pet_id (UUID): + body (PetUpdate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + HTTPValidationError | PetPublic + """ + + + return sync_detailed( + pet_id=pet_id, +client=client, +body=body, + + ).parsed + +async def asyncio_detailed( + pet_id: UUID, + *, + client: AuthenticatedClient, + body: PetUpdate, + +) -> Response[HTTPValidationError | PetPublic]: + """ Update Pet + + Update a pet. + + Args: + pet_id (UUID): + body (PetUpdate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[HTTPValidationError | PetPublic] + """ + + + kwargs = _get_kwargs( + pet_id=pet_id, +body=body, + + ) + + response = await client.get_async_httpx_client().request( + **kwargs + ) + + return _build_response(client=client, response=response) + +async def asyncio( + pet_id: UUID, + *, + client: AuthenticatedClient, + body: PetUpdate, + +) -> HTTPValidationError | PetPublic | None: + """ Update Pet + + Update a pet. + + Args: + pet_id (UUID): + body (PetUpdate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + HTTPValidationError | PetPublic + """ + + + return (await asyncio_detailed( + pet_id=pet_id, +client=client, +body=body, + + )).parsed diff --git a/kindred-sdk/personal_crm_client/api/private/__init__.py b/kindred-sdk/personal_crm_client/api/private/__init__.py new file mode 100644 index 00000000..c9921b5f --- /dev/null +++ b/kindred-sdk/personal_crm_client/api/private/__init__.py @@ -0,0 +1 @@ +""" Contains endpoint functions for accessing the API """ diff --git a/kindred-sdk/personal_crm_client/api/private/private_create_user.py b/kindred-sdk/personal_crm_client/api/private/private_create_user.py new file mode 100644 index 00000000..d7fc013a --- /dev/null +++ b/kindred-sdk/personal_crm_client/api/private/private_create_user.py @@ -0,0 +1,195 @@ +from http import HTTPStatus +from typing import Any, cast +from urllib.parse import quote + +import httpx + +from ...client import AuthenticatedClient, Client +from ...types import Response, UNSET +from ... import errors + +from ...models.http_validation_error import HTTPValidationError +from ...models.private_user_create import PrivateUserCreate +from ...models.user_public import UserPublic +from typing import cast + + + +def _get_kwargs( + *, + body: PrivateUserCreate, + +) -> dict[str, Any]: + headers: dict[str, Any] = {} + + + + + + + _kwargs: dict[str, Any] = { + "method": "post", + "url": "/api/v1/private/users/", + } + + _kwargs["json"] = body.to_dict() + + + headers["Content-Type"] = "application/json" + + _kwargs["headers"] = headers + return _kwargs + + + +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> HTTPValidationError | UserPublic | None: + if response.status_code == 200: + response_200 = UserPublic.from_dict(response.json()) + + + + return response_200 + + if response.status_code == 422: + response_422 = HTTPValidationError.from_dict(response.json()) + + + + return response_422 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[HTTPValidationError | UserPublic]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + *, + client: AuthenticatedClient | Client, + body: PrivateUserCreate, + +) -> Response[HTTPValidationError | UserPublic]: + """ Create User + + Create a new user. + + Args: + body (PrivateUserCreate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[HTTPValidationError | UserPublic] + """ + + + kwargs = _get_kwargs( + body=body, + + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + +def sync( + *, + client: AuthenticatedClient | Client, + body: PrivateUserCreate, + +) -> HTTPValidationError | UserPublic | None: + """ Create User + + Create a new user. + + Args: + body (PrivateUserCreate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + HTTPValidationError | UserPublic + """ + + + return sync_detailed( + client=client, +body=body, + + ).parsed + +async def asyncio_detailed( + *, + client: AuthenticatedClient | Client, + body: PrivateUserCreate, + +) -> Response[HTTPValidationError | UserPublic]: + """ Create User + + Create a new user. + + Args: + body (PrivateUserCreate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[HTTPValidationError | UserPublic] + """ + + + kwargs = _get_kwargs( + body=body, + + ) + + response = await client.get_async_httpx_client().request( + **kwargs + ) + + return _build_response(client=client, response=response) + +async def asyncio( + *, + client: AuthenticatedClient | Client, + body: PrivateUserCreate, + +) -> HTTPValidationError | UserPublic | None: + """ Create User + + Create a new user. + + Args: + body (PrivateUserCreate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + HTTPValidationError | UserPublic + """ + + + return (await asyncio_detailed( + client=client, +body=body, + + )).parsed diff --git a/kindred-sdk/personal_crm_client/api/relationships/__init__.py b/kindred-sdk/personal_crm_client/api/relationships/__init__.py new file mode 100644 index 00000000..c9921b5f --- /dev/null +++ b/kindred-sdk/personal_crm_client/api/relationships/__init__.py @@ -0,0 +1 @@ +""" Contains endpoint functions for accessing the API """ diff --git a/kindred-sdk/personal_crm_client/api/relationships/relationships_create_relationship_route.py b/kindred-sdk/personal_crm_client/api/relationships/relationships_create_relationship_route.py new file mode 100644 index 00000000..2a267c5d --- /dev/null +++ b/kindred-sdk/personal_crm_client/api/relationships/relationships_create_relationship_route.py @@ -0,0 +1,195 @@ +from http import HTTPStatus +from typing import Any, cast +from urllib.parse import quote + +import httpx + +from ...client import AuthenticatedClient, Client +from ...types import Response, UNSET +from ... import errors + +from ...models.http_validation_error import HTTPValidationError +from ...models.relationship_create import RelationshipCreate +from ...models.relationship_public import RelationshipPublic +from typing import cast + + + +def _get_kwargs( + *, + body: RelationshipCreate, + +) -> dict[str, Any]: + headers: dict[str, Any] = {} + + + + + + + _kwargs: dict[str, Any] = { + "method": "post", + "url": "/api/v1/relationships/", + } + + _kwargs["json"] = body.to_dict() + + + headers["Content-Type"] = "application/json" + + _kwargs["headers"] = headers + return _kwargs + + + +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> HTTPValidationError | RelationshipPublic | None: + if response.status_code == 200: + response_200 = RelationshipPublic.from_dict(response.json()) + + + + return response_200 + + if response.status_code == 422: + response_422 = HTTPValidationError.from_dict(response.json()) + + + + return response_422 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[HTTPValidationError | RelationshipPublic]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + *, + client: AuthenticatedClient, + body: RelationshipCreate, + +) -> Response[HTTPValidationError | RelationshipPublic]: + """ Create Relationship Route + + Create a relationship plus its inverse so both contacts stay symmetric. + + Args: + body (RelationshipCreate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[HTTPValidationError | RelationshipPublic] + """ + + + kwargs = _get_kwargs( + body=body, + + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + +def sync( + *, + client: AuthenticatedClient, + body: RelationshipCreate, + +) -> HTTPValidationError | RelationshipPublic | None: + """ Create Relationship Route + + Create a relationship plus its inverse so both contacts stay symmetric. + + Args: + body (RelationshipCreate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + HTTPValidationError | RelationshipPublic + """ + + + return sync_detailed( + client=client, +body=body, + + ).parsed + +async def asyncio_detailed( + *, + client: AuthenticatedClient, + body: RelationshipCreate, + +) -> Response[HTTPValidationError | RelationshipPublic]: + """ Create Relationship Route + + Create a relationship plus its inverse so both contacts stay symmetric. + + Args: + body (RelationshipCreate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[HTTPValidationError | RelationshipPublic] + """ + + + kwargs = _get_kwargs( + body=body, + + ) + + response = await client.get_async_httpx_client().request( + **kwargs + ) + + return _build_response(client=client, response=response) + +async def asyncio( + *, + client: AuthenticatedClient, + body: RelationshipCreate, + +) -> HTTPValidationError | RelationshipPublic | None: + """ Create Relationship Route + + Create a relationship plus its inverse so both contacts stay symmetric. + + Args: + body (RelationshipCreate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + HTTPValidationError | RelationshipPublic + """ + + + return (await asyncio_detailed( + client=client, +body=body, + + )).parsed diff --git a/kindred-sdk/personal_crm_client/api/relationships/relationships_delete_relationship.py b/kindred-sdk/personal_crm_client/api/relationships/relationships_delete_relationship.py new file mode 100644 index 00000000..9bbf89c2 --- /dev/null +++ b/kindred-sdk/personal_crm_client/api/relationships/relationships_delete_relationship.py @@ -0,0 +1,184 @@ +from http import HTTPStatus +from typing import Any, cast +from urllib.parse import quote + +import httpx + +from ...client import AuthenticatedClient, Client +from ...types import Response, UNSET +from ... import errors + +from ...models.http_validation_error import HTTPValidationError +from typing import cast +from uuid import UUID + + + +def _get_kwargs( + rel_id: UUID, + +) -> dict[str, Any]: + + + + + + + _kwargs: dict[str, Any] = { + "method": "delete", + "url": "/api/v1/relationships/{rel_id}".format(rel_id=quote(str(rel_id), safe=""),), + } + + + return _kwargs + + + +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Any | HTTPValidationError | None: + if response.status_code == 200: + response_200 = response.json() + return response_200 + + if response.status_code == 422: + response_422 = HTTPValidationError.from_dict(response.json()) + + + + return response_422 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[Any | HTTPValidationError]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + rel_id: UUID, + *, + client: AuthenticatedClient, + +) -> Response[Any | HTTPValidationError]: + """ Delete Relationship + + Delete a relationship and its paired inverse row. + + Args: + rel_id (UUID): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Any | HTTPValidationError] + """ + + + kwargs = _get_kwargs( + rel_id=rel_id, + + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + +def sync( + rel_id: UUID, + *, + client: AuthenticatedClient, + +) -> Any | HTTPValidationError | None: + """ Delete Relationship + + Delete a relationship and its paired inverse row. + + Args: + rel_id (UUID): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Any | HTTPValidationError + """ + + + return sync_detailed( + rel_id=rel_id, +client=client, + + ).parsed + +async def asyncio_detailed( + rel_id: UUID, + *, + client: AuthenticatedClient, + +) -> Response[Any | HTTPValidationError]: + """ Delete Relationship + + Delete a relationship and its paired inverse row. + + Args: + rel_id (UUID): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Any | HTTPValidationError] + """ + + + kwargs = _get_kwargs( + rel_id=rel_id, + + ) + + response = await client.get_async_httpx_client().request( + **kwargs + ) + + return _build_response(client=client, response=response) + +async def asyncio( + rel_id: UUID, + *, + client: AuthenticatedClient, + +) -> Any | HTTPValidationError | None: + """ Delete Relationship + + Delete a relationship and its paired inverse row. + + Args: + rel_id (UUID): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Any | HTTPValidationError + """ + + + return (await asyncio_detailed( + rel_id=rel_id, +client=client, + + )).parsed diff --git a/kindred-sdk/personal_crm_client/api/relationships/relationships_list_relationships.py b/kindred-sdk/personal_crm_client/api/relationships/relationships_list_relationships.py new file mode 100644 index 00000000..a07478d5 --- /dev/null +++ b/kindred-sdk/personal_crm_client/api/relationships/relationships_list_relationships.py @@ -0,0 +1,184 @@ +from http import HTTPStatus +from typing import Any, cast +from urllib.parse import quote + +import httpx + +from ...client import AuthenticatedClient, Client +from ...types import Response, UNSET +from ... import errors + +from ...models.http_validation_error import HTTPValidationError +from typing import cast +from uuid import UUID + + + +def _get_kwargs( + contact_id: UUID, + +) -> dict[str, Any]: + + + + + + + _kwargs: dict[str, Any] = { + "method": "get", + "url": "/api/v1/relationships/contact/{contact_id}".format(contact_id=quote(str(contact_id), safe=""),), + } + + + return _kwargs + + + +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Any | HTTPValidationError | None: + if response.status_code == 200: + response_200 = response.json() + return response_200 + + if response.status_code == 422: + response_422 = HTTPValidationError.from_dict(response.json()) + + + + return response_422 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[Any | HTTPValidationError]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + contact_id: UUID, + *, + client: AuthenticatedClient, + +) -> Response[Any | HTTPValidationError]: + """ List Relationships + + List relationships for a contact. + + Args: + contact_id (UUID): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Any | HTTPValidationError] + """ + + + kwargs = _get_kwargs( + contact_id=contact_id, + + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + +def sync( + contact_id: UUID, + *, + client: AuthenticatedClient, + +) -> Any | HTTPValidationError | None: + """ List Relationships + + List relationships for a contact. + + Args: + contact_id (UUID): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Any | HTTPValidationError + """ + + + return sync_detailed( + contact_id=contact_id, +client=client, + + ).parsed + +async def asyncio_detailed( + contact_id: UUID, + *, + client: AuthenticatedClient, + +) -> Response[Any | HTTPValidationError]: + """ List Relationships + + List relationships for a contact. + + Args: + contact_id (UUID): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Any | HTTPValidationError] + """ + + + kwargs = _get_kwargs( + contact_id=contact_id, + + ) + + response = await client.get_async_httpx_client().request( + **kwargs + ) + + return _build_response(client=client, response=response) + +async def asyncio( + contact_id: UUID, + *, + client: AuthenticatedClient, + +) -> Any | HTTPValidationError | None: + """ List Relationships + + List relationships for a contact. + + Args: + contact_id (UUID): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Any | HTTPValidationError + """ + + + return (await asyncio_detailed( + contact_id=contact_id, +client=client, + + )).parsed diff --git a/kindred-sdk/personal_crm_client/api/relationships/relationships_lookup_inverse.py b/kindred-sdk/personal_crm_client/api/relationships/relationships_lookup_inverse.py new file mode 100644 index 00000000..709d75a8 --- /dev/null +++ b/kindred-sdk/personal_crm_client/api/relationships/relationships_lookup_inverse.py @@ -0,0 +1,215 @@ +from http import HTTPStatus +from typing import Any, cast +from urllib.parse import quote + +import httpx + +from ...client import AuthenticatedClient, Client +from ...types import Response, UNSET +from ... import errors + +from ...models.http_validation_error import HTTPValidationError +from ...models.relationships_lookup_inverse_response_relationships_lookup_inverse import RelationshipsLookupInverseResponseRelationshipsLookupInverse +from typing import cast + + + +def _get_kwargs( + *, + type_: str, + +) -> dict[str, Any]: + + + + + params: dict[str, Any] = {} + + params["type"] = type_ + + + params = {k: v for k, v in params.items() if v is not UNSET and v is not None} + + + _kwargs: dict[str, Any] = { + "method": "get", + "url": "/api/v1/relationships/inverse", + "params": params, + } + + + return _kwargs + + + +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> HTTPValidationError | RelationshipsLookupInverseResponseRelationshipsLookupInverse | None: + if response.status_code == 200: + response_200 = RelationshipsLookupInverseResponseRelationshipsLookupInverse.from_dict(response.json()) + + + + return response_200 + + if response.status_code == 422: + response_422 = HTTPValidationError.from_dict(response.json()) + + + + return response_422 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[HTTPValidationError | RelationshipsLookupInverseResponseRelationshipsLookupInverse]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + *, + client: AuthenticatedClient, + type_: str, + +) -> Response[HTTPValidationError | RelationshipsLookupInverseResponseRelationshipsLookupInverse]: + r""" Lookup Inverse + + Return the inferred inverse for a relationship type, or null. + + The frontend calls this before saving to decide whether to prompt + the user for the inverse. Symmetric types (\"friend\") return + themselves; asymmetric pairs (\"parent\") return their counterpart + (\"child\"); unknown types return null so the UI can ask. + + Args: + type_ (str): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[HTTPValidationError | RelationshipsLookupInverseResponseRelationshipsLookupInverse] + """ + + + kwargs = _get_kwargs( + type_=type_, + + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + +def sync( + *, + client: AuthenticatedClient, + type_: str, + +) -> HTTPValidationError | RelationshipsLookupInverseResponseRelationshipsLookupInverse | None: + r""" Lookup Inverse + + Return the inferred inverse for a relationship type, or null. + + The frontend calls this before saving to decide whether to prompt + the user for the inverse. Symmetric types (\"friend\") return + themselves; asymmetric pairs (\"parent\") return their counterpart + (\"child\"); unknown types return null so the UI can ask. + + Args: + type_ (str): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + HTTPValidationError | RelationshipsLookupInverseResponseRelationshipsLookupInverse + """ + + + return sync_detailed( + client=client, +type_=type_, + + ).parsed + +async def asyncio_detailed( + *, + client: AuthenticatedClient, + type_: str, + +) -> Response[HTTPValidationError | RelationshipsLookupInverseResponseRelationshipsLookupInverse]: + r""" Lookup Inverse + + Return the inferred inverse for a relationship type, or null. + + The frontend calls this before saving to decide whether to prompt + the user for the inverse. Symmetric types (\"friend\") return + themselves; asymmetric pairs (\"parent\") return their counterpart + (\"child\"); unknown types return null so the UI can ask. + + Args: + type_ (str): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[HTTPValidationError | RelationshipsLookupInverseResponseRelationshipsLookupInverse] + """ + + + kwargs = _get_kwargs( + type_=type_, + + ) + + response = await client.get_async_httpx_client().request( + **kwargs + ) + + return _build_response(client=client, response=response) + +async def asyncio( + *, + client: AuthenticatedClient, + type_: str, + +) -> HTTPValidationError | RelationshipsLookupInverseResponseRelationshipsLookupInverse | None: + r""" Lookup Inverse + + Return the inferred inverse for a relationship type, or null. + + The frontend calls this before saving to decide whether to prompt + the user for the inverse. Symmetric types (\"friend\") return + themselves; asymmetric pairs (\"parent\") return their counterpart + (\"child\"); unknown types return null so the UI can ask. + + Args: + type_ (str): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + HTTPValidationError | RelationshipsLookupInverseResponseRelationshipsLookupInverse + """ + + + return (await asyncio_detailed( + client=client, +type_=type_, + + )).parsed diff --git a/kindred-sdk/personal_crm_client/api/relationships/relationships_update_relationship.py b/kindred-sdk/personal_crm_client/api/relationships/relationships_update_relationship.py new file mode 100644 index 00000000..c22f6623 --- /dev/null +++ b/kindred-sdk/personal_crm_client/api/relationships/relationships_update_relationship.py @@ -0,0 +1,229 @@ +from http import HTTPStatus +from typing import Any, cast +from urllib.parse import quote + +import httpx + +from ...client import AuthenticatedClient, Client +from ...types import Response, UNSET +from ... import errors + +from ...models.http_validation_error import HTTPValidationError +from ...models.relationship_public import RelationshipPublic +from ...models.relationship_update import RelationshipUpdate +from typing import cast +from uuid import UUID + + + +def _get_kwargs( + rel_id: UUID, + *, + body: RelationshipUpdate, + +) -> dict[str, Any]: + headers: dict[str, Any] = {} + + + + + + + _kwargs: dict[str, Any] = { + "method": "patch", + "url": "/api/v1/relationships/{rel_id}".format(rel_id=quote(str(rel_id), safe=""),), + } + + _kwargs["json"] = body.to_dict() + + + headers["Content-Type"] = "application/json" + + _kwargs["headers"] = headers + return _kwargs + + + +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> HTTPValidationError | RelationshipPublic | None: + if response.status_code == 200: + response_200 = RelationshipPublic.from_dict(response.json()) + + + + return response_200 + + if response.status_code == 422: + response_422 = HTTPValidationError.from_dict(response.json()) + + + + return response_422 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[HTTPValidationError | RelationshipPublic]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + rel_id: UUID, + *, + client: AuthenticatedClient, + body: RelationshipUpdate, + +) -> Response[HTTPValidationError | RelationshipPublic]: + """ Update Relationship + + Update a relationship. + + Only the row addressed by ``rel_id`` is touched; the paired + inverse row is left as-is so asymmetric pairs (parent/child) can + diverge intentionally. Edit each side from its own contact page + if you want them to stay matched. + + Args: + rel_id (UUID): + body (RelationshipUpdate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[HTTPValidationError | RelationshipPublic] + """ + + + kwargs = _get_kwargs( + rel_id=rel_id, +body=body, + + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + +def sync( + rel_id: UUID, + *, + client: AuthenticatedClient, + body: RelationshipUpdate, + +) -> HTTPValidationError | RelationshipPublic | None: + """ Update Relationship + + Update a relationship. + + Only the row addressed by ``rel_id`` is touched; the paired + inverse row is left as-is so asymmetric pairs (parent/child) can + diverge intentionally. Edit each side from its own contact page + if you want them to stay matched. + + Args: + rel_id (UUID): + body (RelationshipUpdate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + HTTPValidationError | RelationshipPublic + """ + + + return sync_detailed( + rel_id=rel_id, +client=client, +body=body, + + ).parsed + +async def asyncio_detailed( + rel_id: UUID, + *, + client: AuthenticatedClient, + body: RelationshipUpdate, + +) -> Response[HTTPValidationError | RelationshipPublic]: + """ Update Relationship + + Update a relationship. + + Only the row addressed by ``rel_id`` is touched; the paired + inverse row is left as-is so asymmetric pairs (parent/child) can + diverge intentionally. Edit each side from its own contact page + if you want them to stay matched. + + Args: + rel_id (UUID): + body (RelationshipUpdate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[HTTPValidationError | RelationshipPublic] + """ + + + kwargs = _get_kwargs( + rel_id=rel_id, +body=body, + + ) + + response = await client.get_async_httpx_client().request( + **kwargs + ) + + return _build_response(client=client, response=response) + +async def asyncio( + rel_id: UUID, + *, + client: AuthenticatedClient, + body: RelationshipUpdate, + +) -> HTTPValidationError | RelationshipPublic | None: + """ Update Relationship + + Update a relationship. + + Only the row addressed by ``rel_id`` is touched; the paired + inverse row is left as-is so asymmetric pairs (parent/child) can + diverge intentionally. Edit each side from its own contact page + if you want them to stay matched. + + Args: + rel_id (UUID): + body (RelationshipUpdate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + HTTPValidationError | RelationshipPublic + """ + + + return (await asyncio_detailed( + rel_id=rel_id, +client=client, +body=body, + + )).parsed diff --git a/kindred-sdk/personal_crm_client/api/reminders/__init__.py b/kindred-sdk/personal_crm_client/api/reminders/__init__.py new file mode 100644 index 00000000..c9921b5f --- /dev/null +++ b/kindred-sdk/personal_crm_client/api/reminders/__init__.py @@ -0,0 +1 @@ +""" Contains endpoint functions for accessing the API """ diff --git a/kindred-sdk/personal_crm_client/api/reminders/reminders_create_reminder_route.py b/kindred-sdk/personal_crm_client/api/reminders/reminders_create_reminder_route.py new file mode 100644 index 00000000..980adfbe --- /dev/null +++ b/kindred-sdk/personal_crm_client/api/reminders/reminders_create_reminder_route.py @@ -0,0 +1,195 @@ +from http import HTTPStatus +from typing import Any, cast +from urllib.parse import quote + +import httpx + +from ...client import AuthenticatedClient, Client +from ...types import Response, UNSET +from ... import errors + +from ...models.http_validation_error import HTTPValidationError +from ...models.reminder_create import ReminderCreate +from ...models.reminder_public import ReminderPublic +from typing import cast + + + +def _get_kwargs( + *, + body: ReminderCreate, + +) -> dict[str, Any]: + headers: dict[str, Any] = {} + + + + + + + _kwargs: dict[str, Any] = { + "method": "post", + "url": "/api/v1/reminders/", + } + + _kwargs["json"] = body.to_dict() + + + headers["Content-Type"] = "application/json" + + _kwargs["headers"] = headers + return _kwargs + + + +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> HTTPValidationError | ReminderPublic | None: + if response.status_code == 200: + response_200 = ReminderPublic.from_dict(response.json()) + + + + return response_200 + + if response.status_code == 422: + response_422 = HTTPValidationError.from_dict(response.json()) + + + + return response_422 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[HTTPValidationError | ReminderPublic]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + *, + client: AuthenticatedClient, + body: ReminderCreate, + +) -> Response[HTTPValidationError | ReminderPublic]: + """ Create Reminder Route + + Create a new reminder. + + Args: + body (ReminderCreate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[HTTPValidationError | ReminderPublic] + """ + + + kwargs = _get_kwargs( + body=body, + + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + +def sync( + *, + client: AuthenticatedClient, + body: ReminderCreate, + +) -> HTTPValidationError | ReminderPublic | None: + """ Create Reminder Route + + Create a new reminder. + + Args: + body (ReminderCreate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + HTTPValidationError | ReminderPublic + """ + + + return sync_detailed( + client=client, +body=body, + + ).parsed + +async def asyncio_detailed( + *, + client: AuthenticatedClient, + body: ReminderCreate, + +) -> Response[HTTPValidationError | ReminderPublic]: + """ Create Reminder Route + + Create a new reminder. + + Args: + body (ReminderCreate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[HTTPValidationError | ReminderPublic] + """ + + + kwargs = _get_kwargs( + body=body, + + ) + + response = await client.get_async_httpx_client().request( + **kwargs + ) + + return _build_response(client=client, response=response) + +async def asyncio( + *, + client: AuthenticatedClient, + body: ReminderCreate, + +) -> HTTPValidationError | ReminderPublic | None: + """ Create Reminder Route + + Create a new reminder. + + Args: + body (ReminderCreate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + HTTPValidationError | ReminderPublic + """ + + + return (await asyncio_detailed( + client=client, +body=body, + + )).parsed diff --git a/kindred-sdk/personal_crm_client/api/reminders/reminders_delete_reminder.py b/kindred-sdk/personal_crm_client/api/reminders/reminders_delete_reminder.py new file mode 100644 index 00000000..789a31e9 --- /dev/null +++ b/kindred-sdk/personal_crm_client/api/reminders/reminders_delete_reminder.py @@ -0,0 +1,184 @@ +from http import HTTPStatus +from typing import Any, cast +from urllib.parse import quote + +import httpx + +from ...client import AuthenticatedClient, Client +from ...types import Response, UNSET +from ... import errors + +from ...models.http_validation_error import HTTPValidationError +from typing import cast +from uuid import UUID + + + +def _get_kwargs( + reminder_id: UUID, + +) -> dict[str, Any]: + + + + + + + _kwargs: dict[str, Any] = { + "method": "delete", + "url": "/api/v1/reminders/{reminder_id}".format(reminder_id=quote(str(reminder_id), safe=""),), + } + + + return _kwargs + + + +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Any | HTTPValidationError | None: + if response.status_code == 200: + response_200 = response.json() + return response_200 + + if response.status_code == 422: + response_422 = HTTPValidationError.from_dict(response.json()) + + + + return response_422 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[Any | HTTPValidationError]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + reminder_id: UUID, + *, + client: AuthenticatedClient, + +) -> Response[Any | HTTPValidationError]: + """ Delete Reminder + + Delete a reminder. + + Args: + reminder_id (UUID): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Any | HTTPValidationError] + """ + + + kwargs = _get_kwargs( + reminder_id=reminder_id, + + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + +def sync( + reminder_id: UUID, + *, + client: AuthenticatedClient, + +) -> Any | HTTPValidationError | None: + """ Delete Reminder + + Delete a reminder. + + Args: + reminder_id (UUID): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Any | HTTPValidationError + """ + + + return sync_detailed( + reminder_id=reminder_id, +client=client, + + ).parsed + +async def asyncio_detailed( + reminder_id: UUID, + *, + client: AuthenticatedClient, + +) -> Response[Any | HTTPValidationError]: + """ Delete Reminder + + Delete a reminder. + + Args: + reminder_id (UUID): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Any | HTTPValidationError] + """ + + + kwargs = _get_kwargs( + reminder_id=reminder_id, + + ) + + response = await client.get_async_httpx_client().request( + **kwargs + ) + + return _build_response(client=client, response=response) + +async def asyncio( + reminder_id: UUID, + *, + client: AuthenticatedClient, + +) -> Any | HTTPValidationError | None: + """ Delete Reminder + + Delete a reminder. + + Args: + reminder_id (UUID): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Any | HTTPValidationError + """ + + + return (await asyncio_detailed( + reminder_id=reminder_id, +client=client, + + )).parsed diff --git a/kindred-sdk/personal_crm_client/api/reminders/reminders_list_reminders.py b/kindred-sdk/personal_crm_client/api/reminders/reminders_list_reminders.py new file mode 100644 index 00000000..68025bd0 --- /dev/null +++ b/kindred-sdk/personal_crm_client/api/reminders/reminders_list_reminders.py @@ -0,0 +1,231 @@ +from http import HTTPStatus +from typing import Any, cast +from urllib.parse import quote + +import httpx + +from ...client import AuthenticatedClient, Client +from ...types import Response, UNSET +from ... import errors + +from ...models.http_validation_error import HTTPValidationError +from ...models.reminders_public import RemindersPublic +from ...types import UNSET, Unset +from typing import cast + + + +def _get_kwargs( + *, + skip: int | Unset = 0, + limit: int | Unset = 100, + is_active: bool | None | Unset = UNSET, + +) -> dict[str, Any]: + + + + + params: dict[str, Any] = {} + + params["skip"] = skip + + params["limit"] = limit + + json_is_active: bool | None | Unset + if isinstance(is_active, Unset): + json_is_active = UNSET + else: + json_is_active = is_active + params["is_active"] = json_is_active + + + params = {k: v for k, v in params.items() if v is not UNSET and v is not None} + + + _kwargs: dict[str, Any] = { + "method": "get", + "url": "/api/v1/reminders/", + "params": params, + } + + + return _kwargs + + + +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> HTTPValidationError | RemindersPublic | None: + if response.status_code == 200: + response_200 = RemindersPublic.from_dict(response.json()) + + + + return response_200 + + if response.status_code == 422: + response_422 = HTTPValidationError.from_dict(response.json()) + + + + return response_422 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[HTTPValidationError | RemindersPublic]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + *, + client: AuthenticatedClient, + skip: int | Unset = 0, + limit: int | Unset = 100, + is_active: bool | None | Unset = UNSET, + +) -> Response[HTTPValidationError | RemindersPublic]: + """ List Reminders + + List reminders for the current user (owned + tied to visible contacts). + + Args: + skip (int | Unset): Default: 0. + limit (int | Unset): Default: 100. + is_active (bool | None | Unset): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[HTTPValidationError | RemindersPublic] + """ + + + kwargs = _get_kwargs( + skip=skip, +limit=limit, +is_active=is_active, + + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + +def sync( + *, + client: AuthenticatedClient, + skip: int | Unset = 0, + limit: int | Unset = 100, + is_active: bool | None | Unset = UNSET, + +) -> HTTPValidationError | RemindersPublic | None: + """ List Reminders + + List reminders for the current user (owned + tied to visible contacts). + + Args: + skip (int | Unset): Default: 0. + limit (int | Unset): Default: 100. + is_active (bool | None | Unset): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + HTTPValidationError | RemindersPublic + """ + + + return sync_detailed( + client=client, +skip=skip, +limit=limit, +is_active=is_active, + + ).parsed + +async def asyncio_detailed( + *, + client: AuthenticatedClient, + skip: int | Unset = 0, + limit: int | Unset = 100, + is_active: bool | None | Unset = UNSET, + +) -> Response[HTTPValidationError | RemindersPublic]: + """ List Reminders + + List reminders for the current user (owned + tied to visible contacts). + + Args: + skip (int | Unset): Default: 0. + limit (int | Unset): Default: 100. + is_active (bool | None | Unset): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[HTTPValidationError | RemindersPublic] + """ + + + kwargs = _get_kwargs( + skip=skip, +limit=limit, +is_active=is_active, + + ) + + response = await client.get_async_httpx_client().request( + **kwargs + ) + + return _build_response(client=client, response=response) + +async def asyncio( + *, + client: AuthenticatedClient, + skip: int | Unset = 0, + limit: int | Unset = 100, + is_active: bool | None | Unset = UNSET, + +) -> HTTPValidationError | RemindersPublic | None: + """ List Reminders + + List reminders for the current user (owned + tied to visible contacts). + + Args: + skip (int | Unset): Default: 0. + limit (int | Unset): Default: 100. + is_active (bool | None | Unset): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + HTTPValidationError | RemindersPublic + """ + + + return (await asyncio_detailed( + client=client, +skip=skip, +limit=limit, +is_active=is_active, + + )).parsed diff --git a/kindred-sdk/personal_crm_client/api/reminders/reminders_snooze_reminder.py b/kindred-sdk/personal_crm_client/api/reminders/reminders_snooze_reminder.py new file mode 100644 index 00000000..20fefab0 --- /dev/null +++ b/kindred-sdk/personal_crm_client/api/reminders/reminders_snooze_reminder.py @@ -0,0 +1,206 @@ +from http import HTTPStatus +from typing import Any, cast +from urllib.parse import quote + +import httpx + +from ...client import AuthenticatedClient, Client +from ...types import Response, UNSET +from ... import errors + +from ...models.http_validation_error import HTTPValidationError +from ...types import UNSET, Unset +from typing import cast +from uuid import UUID + + + +def _get_kwargs( + reminder_id: UUID, + *, + minutes: int | Unset = 30, + +) -> dict[str, Any]: + + + + + params: dict[str, Any] = {} + + params["minutes"] = minutes + + + params = {k: v for k, v in params.items() if v is not UNSET and v is not None} + + + _kwargs: dict[str, Any] = { + "method": "post", + "url": "/api/v1/reminders/{reminder_id}/snooze".format(reminder_id=quote(str(reminder_id), safe=""),), + "params": params, + } + + + return _kwargs + + + +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Any | HTTPValidationError | None: + if response.status_code == 200: + response_200 = response.json() + return response_200 + + if response.status_code == 422: + response_422 = HTTPValidationError.from_dict(response.json()) + + + + return response_422 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[Any | HTTPValidationError]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + reminder_id: UUID, + *, + client: AuthenticatedClient, + minutes: int | Unset = 30, + +) -> Response[Any | HTTPValidationError]: + """ Snooze Reminder + + Snooze a reminder. + + Args: + reminder_id (UUID): + minutes (int | Unset): Default: 30. + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Any | HTTPValidationError] + """ + + + kwargs = _get_kwargs( + reminder_id=reminder_id, +minutes=minutes, + + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + +def sync( + reminder_id: UUID, + *, + client: AuthenticatedClient, + minutes: int | Unset = 30, + +) -> Any | HTTPValidationError | None: + """ Snooze Reminder + + Snooze a reminder. + + Args: + reminder_id (UUID): + minutes (int | Unset): Default: 30. + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Any | HTTPValidationError + """ + + + return sync_detailed( + reminder_id=reminder_id, +client=client, +minutes=minutes, + + ).parsed + +async def asyncio_detailed( + reminder_id: UUID, + *, + client: AuthenticatedClient, + minutes: int | Unset = 30, + +) -> Response[Any | HTTPValidationError]: + """ Snooze Reminder + + Snooze a reminder. + + Args: + reminder_id (UUID): + minutes (int | Unset): Default: 30. + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Any | HTTPValidationError] + """ + + + kwargs = _get_kwargs( + reminder_id=reminder_id, +minutes=minutes, + + ) + + response = await client.get_async_httpx_client().request( + **kwargs + ) + + return _build_response(client=client, response=response) + +async def asyncio( + reminder_id: UUID, + *, + client: AuthenticatedClient, + minutes: int | Unset = 30, + +) -> Any | HTTPValidationError | None: + """ Snooze Reminder + + Snooze a reminder. + + Args: + reminder_id (UUID): + minutes (int | Unset): Default: 30. + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Any | HTTPValidationError + """ + + + return (await asyncio_detailed( + reminder_id=reminder_id, +client=client, +minutes=minutes, + + )).parsed diff --git a/kindred-sdk/personal_crm_client/api/reminders/reminders_update_reminder.py b/kindred-sdk/personal_crm_client/api/reminders/reminders_update_reminder.py new file mode 100644 index 00000000..6bcbddd5 --- /dev/null +++ b/kindred-sdk/personal_crm_client/api/reminders/reminders_update_reminder.py @@ -0,0 +1,209 @@ +from http import HTTPStatus +from typing import Any, cast +from urllib.parse import quote + +import httpx + +from ...client import AuthenticatedClient, Client +from ...types import Response, UNSET +from ... import errors + +from ...models.http_validation_error import HTTPValidationError +from ...models.reminder_public import ReminderPublic +from ...models.reminder_update import ReminderUpdate +from typing import cast +from uuid import UUID + + + +def _get_kwargs( + reminder_id: UUID, + *, + body: ReminderUpdate, + +) -> dict[str, Any]: + headers: dict[str, Any] = {} + + + + + + + _kwargs: dict[str, Any] = { + "method": "patch", + "url": "/api/v1/reminders/{reminder_id}".format(reminder_id=quote(str(reminder_id), safe=""),), + } + + _kwargs["json"] = body.to_dict() + + + headers["Content-Type"] = "application/json" + + _kwargs["headers"] = headers + return _kwargs + + + +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> HTTPValidationError | ReminderPublic | None: + if response.status_code == 200: + response_200 = ReminderPublic.from_dict(response.json()) + + + + return response_200 + + if response.status_code == 422: + response_422 = HTTPValidationError.from_dict(response.json()) + + + + return response_422 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[HTTPValidationError | ReminderPublic]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + reminder_id: UUID, + *, + client: AuthenticatedClient, + body: ReminderUpdate, + +) -> Response[HTTPValidationError | ReminderPublic]: + """ Update Reminder + + Update a reminder. + + Args: + reminder_id (UUID): + body (ReminderUpdate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[HTTPValidationError | ReminderPublic] + """ + + + kwargs = _get_kwargs( + reminder_id=reminder_id, +body=body, + + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + +def sync( + reminder_id: UUID, + *, + client: AuthenticatedClient, + body: ReminderUpdate, + +) -> HTTPValidationError | ReminderPublic | None: + """ Update Reminder + + Update a reminder. + + Args: + reminder_id (UUID): + body (ReminderUpdate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + HTTPValidationError | ReminderPublic + """ + + + return sync_detailed( + reminder_id=reminder_id, +client=client, +body=body, + + ).parsed + +async def asyncio_detailed( + reminder_id: UUID, + *, + client: AuthenticatedClient, + body: ReminderUpdate, + +) -> Response[HTTPValidationError | ReminderPublic]: + """ Update Reminder + + Update a reminder. + + Args: + reminder_id (UUID): + body (ReminderUpdate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[HTTPValidationError | ReminderPublic] + """ + + + kwargs = _get_kwargs( + reminder_id=reminder_id, +body=body, + + ) + + response = await client.get_async_httpx_client().request( + **kwargs + ) + + return _build_response(client=client, response=response) + +async def asyncio( + reminder_id: UUID, + *, + client: AuthenticatedClient, + body: ReminderUpdate, + +) -> HTTPValidationError | ReminderPublic | None: + """ Update Reminder + + Update a reminder. + + Args: + reminder_id (UUID): + body (ReminderUpdate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + HTTPValidationError | ReminderPublic + """ + + + return (await asyncio_detailed( + reminder_id=reminder_id, +client=client, +body=body, + + )).parsed diff --git a/kindred-sdk/personal_crm_client/api/tag_shares/__init__.py b/kindred-sdk/personal_crm_client/api/tag_shares/__init__.py new file mode 100644 index 00000000..c9921b5f --- /dev/null +++ b/kindred-sdk/personal_crm_client/api/tag_shares/__init__.py @@ -0,0 +1 @@ +""" Contains endpoint functions for accessing the API """ diff --git a/kindred-sdk/personal_crm_client/api/tag_shares/tag_shares_create_tag_share.py b/kindred-sdk/personal_crm_client/api/tag_shares/tag_shares_create_tag_share.py new file mode 100644 index 00000000..3662a95b --- /dev/null +++ b/kindred-sdk/personal_crm_client/api/tag_shares/tag_shares_create_tag_share.py @@ -0,0 +1,187 @@ +from http import HTTPStatus +from typing import Any, cast +from urllib.parse import quote + +import httpx + +from ...client import AuthenticatedClient, Client +from ...types import Response, UNSET +from ... import errors + +from ...models.http_validation_error import HTTPValidationError +from ...models.share_in import ShareIn +from ...models.tag_share_public import TagSharePublic +from typing import cast + + + +def _get_kwargs( + *, + body: ShareIn, + +) -> dict[str, Any]: + headers: dict[str, Any] = {} + + + + + + + _kwargs: dict[str, Any] = { + "method": "post", + "url": "/api/v1/tag-shares/", + } + + _kwargs["json"] = body.to_dict() + + + headers["Content-Type"] = "application/json" + + _kwargs["headers"] = headers + return _kwargs + + + +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> HTTPValidationError | TagSharePublic | None: + if response.status_code == 200: + response_200 = TagSharePublic.from_dict(response.json()) + + + + return response_200 + + if response.status_code == 422: + response_422 = HTTPValidationError.from_dict(response.json()) + + + + return response_422 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[HTTPValidationError | TagSharePublic]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + *, + client: AuthenticatedClient, + body: ShareIn, + +) -> Response[HTTPValidationError | TagSharePublic]: + """ Create Tag Share + + Args: + body (ShareIn): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[HTTPValidationError | TagSharePublic] + """ + + + kwargs = _get_kwargs( + body=body, + + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + +def sync( + *, + client: AuthenticatedClient, + body: ShareIn, + +) -> HTTPValidationError | TagSharePublic | None: + """ Create Tag Share + + Args: + body (ShareIn): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + HTTPValidationError | TagSharePublic + """ + + + return sync_detailed( + client=client, +body=body, + + ).parsed + +async def asyncio_detailed( + *, + client: AuthenticatedClient, + body: ShareIn, + +) -> Response[HTTPValidationError | TagSharePublic]: + """ Create Tag Share + + Args: + body (ShareIn): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[HTTPValidationError | TagSharePublic] + """ + + + kwargs = _get_kwargs( + body=body, + + ) + + response = await client.get_async_httpx_client().request( + **kwargs + ) + + return _build_response(client=client, response=response) + +async def asyncio( + *, + client: AuthenticatedClient, + body: ShareIn, + +) -> HTTPValidationError | TagSharePublic | None: + """ Create Tag Share + + Args: + body (ShareIn): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + HTTPValidationError | TagSharePublic + """ + + + return (await asyncio_detailed( + client=client, +body=body, + + )).parsed diff --git a/kindred-sdk/personal_crm_client/api/tag_shares/tag_shares_delete_tag_share.py b/kindred-sdk/personal_crm_client/api/tag_shares/tag_shares_delete_tag_share.py new file mode 100644 index 00000000..edbb4352 --- /dev/null +++ b/kindred-sdk/personal_crm_client/api/tag_shares/tag_shares_delete_tag_share.py @@ -0,0 +1,193 @@ +from http import HTTPStatus +from typing import Any, cast +from urllib.parse import quote + +import httpx + +from ...client import AuthenticatedClient, Client +from ...types import Response, UNSET +from ... import errors + +from ...models.http_validation_error import HTTPValidationError +from ...models.tag_shares_delete_tag_share_response_tag_shares_delete_tag_share import TagSharesDeleteTagShareResponseTagSharesDeleteTagShare +from typing import cast +from uuid import UUID + + + +def _get_kwargs( + tag_id: UUID, + grantee_id: UUID, + +) -> dict[str, Any]: + + + + + + + _kwargs: dict[str, Any] = { + "method": "delete", + "url": "/api/v1/tag-shares/{tag_id}/{grantee_id}".format(tag_id=quote(str(tag_id), safe=""),grantee_id=quote(str(grantee_id), safe=""),), + } + + + return _kwargs + + + +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> HTTPValidationError | TagSharesDeleteTagShareResponseTagSharesDeleteTagShare | None: + if response.status_code == 200: + response_200 = TagSharesDeleteTagShareResponseTagSharesDeleteTagShare.from_dict(response.json()) + + + + return response_200 + + if response.status_code == 422: + response_422 = HTTPValidationError.from_dict(response.json()) + + + + return response_422 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[HTTPValidationError | TagSharesDeleteTagShareResponseTagSharesDeleteTagShare]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + tag_id: UUID, + grantee_id: UUID, + *, + client: AuthenticatedClient, + +) -> Response[HTTPValidationError | TagSharesDeleteTagShareResponseTagSharesDeleteTagShare]: + """ Delete Tag Share + + Args: + tag_id (UUID): + grantee_id (UUID): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[HTTPValidationError | TagSharesDeleteTagShareResponseTagSharesDeleteTagShare] + """ + + + kwargs = _get_kwargs( + tag_id=tag_id, +grantee_id=grantee_id, + + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + +def sync( + tag_id: UUID, + grantee_id: UUID, + *, + client: AuthenticatedClient, + +) -> HTTPValidationError | TagSharesDeleteTagShareResponseTagSharesDeleteTagShare | None: + """ Delete Tag Share + + Args: + tag_id (UUID): + grantee_id (UUID): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + HTTPValidationError | TagSharesDeleteTagShareResponseTagSharesDeleteTagShare + """ + + + return sync_detailed( + tag_id=tag_id, +grantee_id=grantee_id, +client=client, + + ).parsed + +async def asyncio_detailed( + tag_id: UUID, + grantee_id: UUID, + *, + client: AuthenticatedClient, + +) -> Response[HTTPValidationError | TagSharesDeleteTagShareResponseTagSharesDeleteTagShare]: + """ Delete Tag Share + + Args: + tag_id (UUID): + grantee_id (UUID): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[HTTPValidationError | TagSharesDeleteTagShareResponseTagSharesDeleteTagShare] + """ + + + kwargs = _get_kwargs( + tag_id=tag_id, +grantee_id=grantee_id, + + ) + + response = await client.get_async_httpx_client().request( + **kwargs + ) + + return _build_response(client=client, response=response) + +async def asyncio( + tag_id: UUID, + grantee_id: UUID, + *, + client: AuthenticatedClient, + +) -> HTTPValidationError | TagSharesDeleteTagShareResponseTagSharesDeleteTagShare | None: + """ Delete Tag Share + + Args: + tag_id (UUID): + grantee_id (UUID): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + HTTPValidationError | TagSharesDeleteTagShareResponseTagSharesDeleteTagShare + """ + + + return (await asyncio_detailed( + tag_id=tag_id, +grantee_id=grantee_id, +client=client, + + )).parsed diff --git a/kindred-sdk/personal_crm_client/api/tag_shares/tag_shares_list_tag_shares.py b/kindred-sdk/personal_crm_client/api/tag_shares/tag_shares_list_tag_shares.py new file mode 100644 index 00000000..8897b158 --- /dev/null +++ b/kindred-sdk/personal_crm_client/api/tag_shares/tag_shares_list_tag_shares.py @@ -0,0 +1,189 @@ +from http import HTTPStatus +from typing import Any, cast +from urllib.parse import quote + +import httpx + +from ...client import AuthenticatedClient, Client +from ...types import Response, UNSET +from ... import errors + +from ...models.http_validation_error import HTTPValidationError +from ...models.tag_shares_public import TagSharesPublic +from typing import cast +from uuid import UUID + + + +def _get_kwargs( + *, + tag_id: UUID, + +) -> dict[str, Any]: + + + + + params: dict[str, Any] = {} + + json_tag_id = str(tag_id) + params["tag_id"] = json_tag_id + + + params = {k: v for k, v in params.items() if v is not UNSET and v is not None} + + + _kwargs: dict[str, Any] = { + "method": "get", + "url": "/api/v1/tag-shares/", + "params": params, + } + + + return _kwargs + + + +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> HTTPValidationError | TagSharesPublic | None: + if response.status_code == 200: + response_200 = TagSharesPublic.from_dict(response.json()) + + + + return response_200 + + if response.status_code == 422: + response_422 = HTTPValidationError.from_dict(response.json()) + + + + return response_422 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[HTTPValidationError | TagSharesPublic]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + *, + client: AuthenticatedClient, + tag_id: UUID, + +) -> Response[HTTPValidationError | TagSharesPublic]: + """ List Tag Shares + + Args: + tag_id (UUID): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[HTTPValidationError | TagSharesPublic] + """ + + + kwargs = _get_kwargs( + tag_id=tag_id, + + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + +def sync( + *, + client: AuthenticatedClient, + tag_id: UUID, + +) -> HTTPValidationError | TagSharesPublic | None: + """ List Tag Shares + + Args: + tag_id (UUID): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + HTTPValidationError | TagSharesPublic + """ + + + return sync_detailed( + client=client, +tag_id=tag_id, + + ).parsed + +async def asyncio_detailed( + *, + client: AuthenticatedClient, + tag_id: UUID, + +) -> Response[HTTPValidationError | TagSharesPublic]: + """ List Tag Shares + + Args: + tag_id (UUID): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[HTTPValidationError | TagSharesPublic] + """ + + + kwargs = _get_kwargs( + tag_id=tag_id, + + ) + + response = await client.get_async_httpx_client().request( + **kwargs + ) + + return _build_response(client=client, response=response) + +async def asyncio( + *, + client: AuthenticatedClient, + tag_id: UUID, + +) -> HTTPValidationError | TagSharesPublic | None: + """ List Tag Shares + + Args: + tag_id (UUID): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + HTTPValidationError | TagSharesPublic + """ + + + return (await asyncio_detailed( + client=client, +tag_id=tag_id, + + )).parsed diff --git a/kindred-sdk/personal_crm_client/api/tags/__init__.py b/kindred-sdk/personal_crm_client/api/tags/__init__.py new file mode 100644 index 00000000..c9921b5f --- /dev/null +++ b/kindred-sdk/personal_crm_client/api/tags/__init__.py @@ -0,0 +1 @@ +""" Contains endpoint functions for accessing the API """ diff --git a/kindred-sdk/personal_crm_client/api/tags/tags_create_tag_route.py b/kindred-sdk/personal_crm_client/api/tags/tags_create_tag_route.py new file mode 100644 index 00000000..08a06629 --- /dev/null +++ b/kindred-sdk/personal_crm_client/api/tags/tags_create_tag_route.py @@ -0,0 +1,195 @@ +from http import HTTPStatus +from typing import Any, cast +from urllib.parse import quote + +import httpx + +from ...client import AuthenticatedClient, Client +from ...types import Response, UNSET +from ... import errors + +from ...models.http_validation_error import HTTPValidationError +from ...models.tag_create import TagCreate +from ...models.tag_public import TagPublic +from typing import cast + + + +def _get_kwargs( + *, + body: TagCreate, + +) -> dict[str, Any]: + headers: dict[str, Any] = {} + + + + + + + _kwargs: dict[str, Any] = { + "method": "post", + "url": "/api/v1/tags/", + } + + _kwargs["json"] = body.to_dict() + + + headers["Content-Type"] = "application/json" + + _kwargs["headers"] = headers + return _kwargs + + + +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> HTTPValidationError | TagPublic | None: + if response.status_code == 200: + response_200 = TagPublic.from_dict(response.json()) + + + + return response_200 + + if response.status_code == 422: + response_422 = HTTPValidationError.from_dict(response.json()) + + + + return response_422 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[HTTPValidationError | TagPublic]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + *, + client: AuthenticatedClient, + body: TagCreate, + +) -> Response[HTTPValidationError | TagPublic]: + """ Create Tag Route + + Create a new tag. + + Args: + body (TagCreate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[HTTPValidationError | TagPublic] + """ + + + kwargs = _get_kwargs( + body=body, + + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + +def sync( + *, + client: AuthenticatedClient, + body: TagCreate, + +) -> HTTPValidationError | TagPublic | None: + """ Create Tag Route + + Create a new tag. + + Args: + body (TagCreate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + HTTPValidationError | TagPublic + """ + + + return sync_detailed( + client=client, +body=body, + + ).parsed + +async def asyncio_detailed( + *, + client: AuthenticatedClient, + body: TagCreate, + +) -> Response[HTTPValidationError | TagPublic]: + """ Create Tag Route + + Create a new tag. + + Args: + body (TagCreate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[HTTPValidationError | TagPublic] + """ + + + kwargs = _get_kwargs( + body=body, + + ) + + response = await client.get_async_httpx_client().request( + **kwargs + ) + + return _build_response(client=client, response=response) + +async def asyncio( + *, + client: AuthenticatedClient, + body: TagCreate, + +) -> HTTPValidationError | TagPublic | None: + """ Create Tag Route + + Create a new tag. + + Args: + body (TagCreate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + HTTPValidationError | TagPublic + """ + + + return (await asyncio_detailed( + client=client, +body=body, + + )).parsed diff --git a/kindred-sdk/personal_crm_client/api/tags/tags_delete_tag.py b/kindred-sdk/personal_crm_client/api/tags/tags_delete_tag.py new file mode 100644 index 00000000..f55e1067 --- /dev/null +++ b/kindred-sdk/personal_crm_client/api/tags/tags_delete_tag.py @@ -0,0 +1,184 @@ +from http import HTTPStatus +from typing import Any, cast +from urllib.parse import quote + +import httpx + +from ...client import AuthenticatedClient, Client +from ...types import Response, UNSET +from ... import errors + +from ...models.http_validation_error import HTTPValidationError +from typing import cast +from uuid import UUID + + + +def _get_kwargs( + tag_id: UUID, + +) -> dict[str, Any]: + + + + + + + _kwargs: dict[str, Any] = { + "method": "delete", + "url": "/api/v1/tags/{tag_id}".format(tag_id=quote(str(tag_id), safe=""),), + } + + + return _kwargs + + + +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Any | HTTPValidationError | None: + if response.status_code == 200: + response_200 = response.json() + return response_200 + + if response.status_code == 422: + response_422 = HTTPValidationError.from_dict(response.json()) + + + + return response_422 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[Any | HTTPValidationError]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + tag_id: UUID, + *, + client: AuthenticatedClient, + +) -> Response[Any | HTTPValidationError]: + """ Delete Tag + + Delete a tag. + + Args: + tag_id (UUID): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Any | HTTPValidationError] + """ + + + kwargs = _get_kwargs( + tag_id=tag_id, + + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + +def sync( + tag_id: UUID, + *, + client: AuthenticatedClient, + +) -> Any | HTTPValidationError | None: + """ Delete Tag + + Delete a tag. + + Args: + tag_id (UUID): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Any | HTTPValidationError + """ + + + return sync_detailed( + tag_id=tag_id, +client=client, + + ).parsed + +async def asyncio_detailed( + tag_id: UUID, + *, + client: AuthenticatedClient, + +) -> Response[Any | HTTPValidationError]: + """ Delete Tag + + Delete a tag. + + Args: + tag_id (UUID): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Any | HTTPValidationError] + """ + + + kwargs = _get_kwargs( + tag_id=tag_id, + + ) + + response = await client.get_async_httpx_client().request( + **kwargs + ) + + return _build_response(client=client, response=response) + +async def asyncio( + tag_id: UUID, + *, + client: AuthenticatedClient, + +) -> Any | HTTPValidationError | None: + """ Delete Tag + + Delete a tag. + + Args: + tag_id (UUID): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Any | HTTPValidationError + """ + + + return (await asyncio_detailed( + tag_id=tag_id, +client=client, + + )).parsed diff --git a/kindred-sdk/personal_crm_client/api/tags/tags_list_tags.py b/kindred-sdk/personal_crm_client/api/tags/tags_list_tags.py new file mode 100644 index 00000000..8be5bbbd --- /dev/null +++ b/kindred-sdk/personal_crm_client/api/tags/tags_list_tags.py @@ -0,0 +1,211 @@ +from http import HTTPStatus +from typing import Any, cast +from urllib.parse import quote + +import httpx + +from ...client import AuthenticatedClient, Client +from ...types import Response, UNSET +from ... import errors + +from ...models.http_validation_error import HTTPValidationError +from ...models.tags_public import TagsPublic +from ...types import UNSET, Unset +from typing import cast + + + +def _get_kwargs( + *, + skip: int | Unset = 0, + limit: int | Unset = 100, + +) -> dict[str, Any]: + + + + + params: dict[str, Any] = {} + + params["skip"] = skip + + params["limit"] = limit + + + params = {k: v for k, v in params.items() if v is not UNSET and v is not None} + + + _kwargs: dict[str, Any] = { + "method": "get", + "url": "/api/v1/tags/", + "params": params, + } + + + return _kwargs + + + +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> HTTPValidationError | TagsPublic | None: + if response.status_code == 200: + response_200 = TagsPublic.from_dict(response.json()) + + + + return response_200 + + if response.status_code == 422: + response_422 = HTTPValidationError.from_dict(response.json()) + + + + return response_422 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[HTTPValidationError | TagsPublic]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + *, + client: AuthenticatedClient, + skip: int | Unset = 0, + limit: int | Unset = 100, + +) -> Response[HTTPValidationError | TagsPublic]: + """ List Tags + + List all tags for the current user. + + Args: + skip (int | Unset): Default: 0. + limit (int | Unset): Default: 100. + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[HTTPValidationError | TagsPublic] + """ + + + kwargs = _get_kwargs( + skip=skip, +limit=limit, + + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + +def sync( + *, + client: AuthenticatedClient, + skip: int | Unset = 0, + limit: int | Unset = 100, + +) -> HTTPValidationError | TagsPublic | None: + """ List Tags + + List all tags for the current user. + + Args: + skip (int | Unset): Default: 0. + limit (int | Unset): Default: 100. + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + HTTPValidationError | TagsPublic + """ + + + return sync_detailed( + client=client, +skip=skip, +limit=limit, + + ).parsed + +async def asyncio_detailed( + *, + client: AuthenticatedClient, + skip: int | Unset = 0, + limit: int | Unset = 100, + +) -> Response[HTTPValidationError | TagsPublic]: + """ List Tags + + List all tags for the current user. + + Args: + skip (int | Unset): Default: 0. + limit (int | Unset): Default: 100. + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[HTTPValidationError | TagsPublic] + """ + + + kwargs = _get_kwargs( + skip=skip, +limit=limit, + + ) + + response = await client.get_async_httpx_client().request( + **kwargs + ) + + return _build_response(client=client, response=response) + +async def asyncio( + *, + client: AuthenticatedClient, + skip: int | Unset = 0, + limit: int | Unset = 100, + +) -> HTTPValidationError | TagsPublic | None: + """ List Tags + + List all tags for the current user. + + Args: + skip (int | Unset): Default: 0. + limit (int | Unset): Default: 100. + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + HTTPValidationError | TagsPublic + """ + + + return (await asyncio_detailed( + client=client, +skip=skip, +limit=limit, + + )).parsed diff --git a/kindred-sdk/personal_crm_client/api/tags/tags_update_tag.py b/kindred-sdk/personal_crm_client/api/tags/tags_update_tag.py new file mode 100644 index 00000000..bfd333c9 --- /dev/null +++ b/kindred-sdk/personal_crm_client/api/tags/tags_update_tag.py @@ -0,0 +1,209 @@ +from http import HTTPStatus +from typing import Any, cast +from urllib.parse import quote + +import httpx + +from ...client import AuthenticatedClient, Client +from ...types import Response, UNSET +from ... import errors + +from ...models.http_validation_error import HTTPValidationError +from ...models.tag_public import TagPublic +from ...models.tag_update import TagUpdate +from typing import cast +from uuid import UUID + + + +def _get_kwargs( + tag_id: UUID, + *, + body: TagUpdate, + +) -> dict[str, Any]: + headers: dict[str, Any] = {} + + + + + + + _kwargs: dict[str, Any] = { + "method": "patch", + "url": "/api/v1/tags/{tag_id}".format(tag_id=quote(str(tag_id), safe=""),), + } + + _kwargs["json"] = body.to_dict() + + + headers["Content-Type"] = "application/json" + + _kwargs["headers"] = headers + return _kwargs + + + +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> HTTPValidationError | TagPublic | None: + if response.status_code == 200: + response_200 = TagPublic.from_dict(response.json()) + + + + return response_200 + + if response.status_code == 422: + response_422 = HTTPValidationError.from_dict(response.json()) + + + + return response_422 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[HTTPValidationError | TagPublic]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + tag_id: UUID, + *, + client: AuthenticatedClient, + body: TagUpdate, + +) -> Response[HTTPValidationError | TagPublic]: + """ Update Tag + + Update a tag. + + Args: + tag_id (UUID): + body (TagUpdate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[HTTPValidationError | TagPublic] + """ + + + kwargs = _get_kwargs( + tag_id=tag_id, +body=body, + + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + +def sync( + tag_id: UUID, + *, + client: AuthenticatedClient, + body: TagUpdate, + +) -> HTTPValidationError | TagPublic | None: + """ Update Tag + + Update a tag. + + Args: + tag_id (UUID): + body (TagUpdate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + HTTPValidationError | TagPublic + """ + + + return sync_detailed( + tag_id=tag_id, +client=client, +body=body, + + ).parsed + +async def asyncio_detailed( + tag_id: UUID, + *, + client: AuthenticatedClient, + body: TagUpdate, + +) -> Response[HTTPValidationError | TagPublic]: + """ Update Tag + + Update a tag. + + Args: + tag_id (UUID): + body (TagUpdate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[HTTPValidationError | TagPublic] + """ + + + kwargs = _get_kwargs( + tag_id=tag_id, +body=body, + + ) + + response = await client.get_async_httpx_client().request( + **kwargs + ) + + return _build_response(client=client, response=response) + +async def asyncio( + tag_id: UUID, + *, + client: AuthenticatedClient, + body: TagUpdate, + +) -> HTTPValidationError | TagPublic | None: + """ Update Tag + + Update a tag. + + Args: + tag_id (UUID): + body (TagUpdate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + HTTPValidationError | TagPublic + """ + + + return (await asyncio_detailed( + tag_id=tag_id, +client=client, +body=body, + + )).parsed diff --git a/kindred-sdk/personal_crm_client/api/users/__init__.py b/kindred-sdk/personal_crm_client/api/users/__init__.py new file mode 100644 index 00000000..c9921b5f --- /dev/null +++ b/kindred-sdk/personal_crm_client/api/users/__init__.py @@ -0,0 +1 @@ +""" Contains endpoint functions for accessing the API """ diff --git a/kindred-sdk/personal_crm_client/api/users/users_create_user.py b/kindred-sdk/personal_crm_client/api/users/users_create_user.py new file mode 100644 index 00000000..509c398c --- /dev/null +++ b/kindred-sdk/personal_crm_client/api/users/users_create_user.py @@ -0,0 +1,195 @@ +from http import HTTPStatus +from typing import Any, cast +from urllib.parse import quote + +import httpx + +from ...client import AuthenticatedClient, Client +from ...types import Response, UNSET +from ... import errors + +from ...models.http_validation_error import HTTPValidationError +from ...models.user_create import UserCreate +from ...models.user_public import UserPublic +from typing import cast + + + +def _get_kwargs( + *, + body: UserCreate, + +) -> dict[str, Any]: + headers: dict[str, Any] = {} + + + + + + + _kwargs: dict[str, Any] = { + "method": "post", + "url": "/api/v1/users/", + } + + _kwargs["json"] = body.to_dict() + + + headers["Content-Type"] = "application/json" + + _kwargs["headers"] = headers + return _kwargs + + + +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> HTTPValidationError | UserPublic | None: + if response.status_code == 200: + response_200 = UserPublic.from_dict(response.json()) + + + + return response_200 + + if response.status_code == 422: + response_422 = HTTPValidationError.from_dict(response.json()) + + + + return response_422 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[HTTPValidationError | UserPublic]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + *, + client: AuthenticatedClient, + body: UserCreate, + +) -> Response[HTTPValidationError | UserPublic]: + """ Create User + + Create new user. + + Args: + body (UserCreate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[HTTPValidationError | UserPublic] + """ + + + kwargs = _get_kwargs( + body=body, + + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + +def sync( + *, + client: AuthenticatedClient, + body: UserCreate, + +) -> HTTPValidationError | UserPublic | None: + """ Create User + + Create new user. + + Args: + body (UserCreate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + HTTPValidationError | UserPublic + """ + + + return sync_detailed( + client=client, +body=body, + + ).parsed + +async def asyncio_detailed( + *, + client: AuthenticatedClient, + body: UserCreate, + +) -> Response[HTTPValidationError | UserPublic]: + """ Create User + + Create new user. + + Args: + body (UserCreate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[HTTPValidationError | UserPublic] + """ + + + kwargs = _get_kwargs( + body=body, + + ) + + response = await client.get_async_httpx_client().request( + **kwargs + ) + + return _build_response(client=client, response=response) + +async def asyncio( + *, + client: AuthenticatedClient, + body: UserCreate, + +) -> HTTPValidationError | UserPublic | None: + """ Create User + + Create new user. + + Args: + body (UserCreate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + HTTPValidationError | UserPublic + """ + + + return (await asyncio_detailed( + client=client, +body=body, + + )).parsed diff --git a/kindred-sdk/personal_crm_client/api/users/users_delete_user.py b/kindred-sdk/personal_crm_client/api/users/users_delete_user.py new file mode 100644 index 00000000..a23219b1 --- /dev/null +++ b/kindred-sdk/personal_crm_client/api/users/users_delete_user.py @@ -0,0 +1,188 @@ +from http import HTTPStatus +from typing import Any, cast +from urllib.parse import quote + +import httpx + +from ...client import AuthenticatedClient, Client +from ...types import Response, UNSET +from ... import errors + +from ...models.http_validation_error import HTTPValidationError +from ...models.message import Message +from typing import cast +from uuid import UUID + + + +def _get_kwargs( + user_id: UUID, + +) -> dict[str, Any]: + + + + + + + _kwargs: dict[str, Any] = { + "method": "delete", + "url": "/api/v1/users/{user_id}".format(user_id=quote(str(user_id), safe=""),), + } + + + return _kwargs + + + +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> HTTPValidationError | Message | None: + if response.status_code == 200: + response_200 = Message.from_dict(response.json()) + + + + return response_200 + + if response.status_code == 422: + response_422 = HTTPValidationError.from_dict(response.json()) + + + + return response_422 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[HTTPValidationError | Message]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + user_id: UUID, + *, + client: AuthenticatedClient, + +) -> Response[HTTPValidationError | Message]: + """ Delete User + + Delete a user. + + Args: + user_id (UUID): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[HTTPValidationError | Message] + """ + + + kwargs = _get_kwargs( + user_id=user_id, + + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + +def sync( + user_id: UUID, + *, + client: AuthenticatedClient, + +) -> HTTPValidationError | Message | None: + """ Delete User + + Delete a user. + + Args: + user_id (UUID): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + HTTPValidationError | Message + """ + + + return sync_detailed( + user_id=user_id, +client=client, + + ).parsed + +async def asyncio_detailed( + user_id: UUID, + *, + client: AuthenticatedClient, + +) -> Response[HTTPValidationError | Message]: + """ Delete User + + Delete a user. + + Args: + user_id (UUID): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[HTTPValidationError | Message] + """ + + + kwargs = _get_kwargs( + user_id=user_id, + + ) + + response = await client.get_async_httpx_client().request( + **kwargs + ) + + return _build_response(client=client, response=response) + +async def asyncio( + user_id: UUID, + *, + client: AuthenticatedClient, + +) -> HTTPValidationError | Message | None: + """ Delete User + + Delete a user. + + Args: + user_id (UUID): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + HTTPValidationError | Message + """ + + + return (await asyncio_detailed( + user_id=user_id, +client=client, + + )).parsed diff --git a/kindred-sdk/personal_crm_client/api/users/users_delete_user_me.py b/kindred-sdk/personal_crm_client/api/users/users_delete_user_me.py new file mode 100644 index 00000000..057cb443 --- /dev/null +++ b/kindred-sdk/personal_crm_client/api/users/users_delete_user_me.py @@ -0,0 +1,158 @@ +from http import HTTPStatus +from typing import Any, cast +from urllib.parse import quote + +import httpx + +from ...client import AuthenticatedClient, Client +from ...types import Response, UNSET +from ... import errors + +from ...models.message import Message +from typing import cast + + + +def _get_kwargs( + +) -> dict[str, Any]: + + + + + + + _kwargs: dict[str, Any] = { + "method": "delete", + "url": "/api/v1/users/me", + } + + + return _kwargs + + + +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Message | None: + if response.status_code == 200: + response_200 = Message.from_dict(response.json()) + + + + return response_200 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[Message]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + *, + client: AuthenticatedClient, + +) -> Response[Message]: + """ Delete User Me + + Delete own user. + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Message] + """ + + + kwargs = _get_kwargs( + + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + +def sync( + *, + client: AuthenticatedClient, + +) -> Message | None: + """ Delete User Me + + Delete own user. + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Message + """ + + + return sync_detailed( + client=client, + + ).parsed + +async def asyncio_detailed( + *, + client: AuthenticatedClient, + +) -> Response[Message]: + """ Delete User Me + + Delete own user. + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Message] + """ + + + kwargs = _get_kwargs( + + ) + + response = await client.get_async_httpx_client().request( + **kwargs + ) + + return _build_response(client=client, response=response) + +async def asyncio( + *, + client: AuthenticatedClient, + +) -> Message | None: + """ Delete User Me + + Delete own user. + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Message + """ + + + return (await asyncio_detailed( + client=client, + + )).parsed diff --git a/kindred-sdk/personal_crm_client/api/users/users_read_user_by_id.py b/kindred-sdk/personal_crm_client/api/users/users_read_user_by_id.py new file mode 100644 index 00000000..eeaaaa84 --- /dev/null +++ b/kindred-sdk/personal_crm_client/api/users/users_read_user_by_id.py @@ -0,0 +1,188 @@ +from http import HTTPStatus +from typing import Any, cast +from urllib.parse import quote + +import httpx + +from ...client import AuthenticatedClient, Client +from ...types import Response, UNSET +from ... import errors + +from ...models.http_validation_error import HTTPValidationError +from ...models.user_public import UserPublic +from typing import cast +from uuid import UUID + + + +def _get_kwargs( + user_id: UUID, + +) -> dict[str, Any]: + + + + + + + _kwargs: dict[str, Any] = { + "method": "get", + "url": "/api/v1/users/{user_id}".format(user_id=quote(str(user_id), safe=""),), + } + + + return _kwargs + + + +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> HTTPValidationError | UserPublic | None: + if response.status_code == 200: + response_200 = UserPublic.from_dict(response.json()) + + + + return response_200 + + if response.status_code == 422: + response_422 = HTTPValidationError.from_dict(response.json()) + + + + return response_422 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[HTTPValidationError | UserPublic]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + user_id: UUID, + *, + client: AuthenticatedClient, + +) -> Response[HTTPValidationError | UserPublic]: + """ Read User By Id + + Get a specific user by id. + + Args: + user_id (UUID): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[HTTPValidationError | UserPublic] + """ + + + kwargs = _get_kwargs( + user_id=user_id, + + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + +def sync( + user_id: UUID, + *, + client: AuthenticatedClient, + +) -> HTTPValidationError | UserPublic | None: + """ Read User By Id + + Get a specific user by id. + + Args: + user_id (UUID): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + HTTPValidationError | UserPublic + """ + + + return sync_detailed( + user_id=user_id, +client=client, + + ).parsed + +async def asyncio_detailed( + user_id: UUID, + *, + client: AuthenticatedClient, + +) -> Response[HTTPValidationError | UserPublic]: + """ Read User By Id + + Get a specific user by id. + + Args: + user_id (UUID): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[HTTPValidationError | UserPublic] + """ + + + kwargs = _get_kwargs( + user_id=user_id, + + ) + + response = await client.get_async_httpx_client().request( + **kwargs + ) + + return _build_response(client=client, response=response) + +async def asyncio( + user_id: UUID, + *, + client: AuthenticatedClient, + +) -> HTTPValidationError | UserPublic | None: + """ Read User By Id + + Get a specific user by id. + + Args: + user_id (UUID): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + HTTPValidationError | UserPublic + """ + + + return (await asyncio_detailed( + user_id=user_id, +client=client, + + )).parsed diff --git a/kindred-sdk/personal_crm_client/api/users/users_read_user_me.py b/kindred-sdk/personal_crm_client/api/users/users_read_user_me.py new file mode 100644 index 00000000..bceb829d --- /dev/null +++ b/kindred-sdk/personal_crm_client/api/users/users_read_user_me.py @@ -0,0 +1,158 @@ +from http import HTTPStatus +from typing import Any, cast +from urllib.parse import quote + +import httpx + +from ...client import AuthenticatedClient, Client +from ...types import Response, UNSET +from ... import errors + +from ...models.user_public import UserPublic +from typing import cast + + + +def _get_kwargs( + +) -> dict[str, Any]: + + + + + + + _kwargs: dict[str, Any] = { + "method": "get", + "url": "/api/v1/users/me", + } + + + return _kwargs + + + +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> UserPublic | None: + if response.status_code == 200: + response_200 = UserPublic.from_dict(response.json()) + + + + return response_200 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[UserPublic]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + *, + client: AuthenticatedClient, + +) -> Response[UserPublic]: + """ Read User Me + + Get current user. + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[UserPublic] + """ + + + kwargs = _get_kwargs( + + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + +def sync( + *, + client: AuthenticatedClient, + +) -> UserPublic | None: + """ Read User Me + + Get current user. + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + UserPublic + """ + + + return sync_detailed( + client=client, + + ).parsed + +async def asyncio_detailed( + *, + client: AuthenticatedClient, + +) -> Response[UserPublic]: + """ Read User Me + + Get current user. + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[UserPublic] + """ + + + kwargs = _get_kwargs( + + ) + + response = await client.get_async_httpx_client().request( + **kwargs + ) + + return _build_response(client=client, response=response) + +async def asyncio( + *, + client: AuthenticatedClient, + +) -> UserPublic | None: + """ Read User Me + + Get current user. + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + UserPublic + """ + + + return (await asyncio_detailed( + client=client, + + )).parsed diff --git a/kindred-sdk/personal_crm_client/api/users/users_read_users.py b/kindred-sdk/personal_crm_client/api/users/users_read_users.py new file mode 100644 index 00000000..ed8fa140 --- /dev/null +++ b/kindred-sdk/personal_crm_client/api/users/users_read_users.py @@ -0,0 +1,211 @@ +from http import HTTPStatus +from typing import Any, cast +from urllib.parse import quote + +import httpx + +from ...client import AuthenticatedClient, Client +from ...types import Response, UNSET +from ... import errors + +from ...models.http_validation_error import HTTPValidationError +from ...models.users_public import UsersPublic +from ...types import UNSET, Unset +from typing import cast + + + +def _get_kwargs( + *, + skip: int | Unset = 0, + limit: int | Unset = 100, + +) -> dict[str, Any]: + + + + + params: dict[str, Any] = {} + + params["skip"] = skip + + params["limit"] = limit + + + params = {k: v for k, v in params.items() if v is not UNSET and v is not None} + + + _kwargs: dict[str, Any] = { + "method": "get", + "url": "/api/v1/users/", + "params": params, + } + + + return _kwargs + + + +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> HTTPValidationError | UsersPublic | None: + if response.status_code == 200: + response_200 = UsersPublic.from_dict(response.json()) + + + + return response_200 + + if response.status_code == 422: + response_422 = HTTPValidationError.from_dict(response.json()) + + + + return response_422 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[HTTPValidationError | UsersPublic]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + *, + client: AuthenticatedClient, + skip: int | Unset = 0, + limit: int | Unset = 100, + +) -> Response[HTTPValidationError | UsersPublic]: + """ Read Users + + Retrieve users. + + Args: + skip (int | Unset): Default: 0. + limit (int | Unset): Default: 100. + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[HTTPValidationError | UsersPublic] + """ + + + kwargs = _get_kwargs( + skip=skip, +limit=limit, + + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + +def sync( + *, + client: AuthenticatedClient, + skip: int | Unset = 0, + limit: int | Unset = 100, + +) -> HTTPValidationError | UsersPublic | None: + """ Read Users + + Retrieve users. + + Args: + skip (int | Unset): Default: 0. + limit (int | Unset): Default: 100. + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + HTTPValidationError | UsersPublic + """ + + + return sync_detailed( + client=client, +skip=skip, +limit=limit, + + ).parsed + +async def asyncio_detailed( + *, + client: AuthenticatedClient, + skip: int | Unset = 0, + limit: int | Unset = 100, + +) -> Response[HTTPValidationError | UsersPublic]: + """ Read Users + + Retrieve users. + + Args: + skip (int | Unset): Default: 0. + limit (int | Unset): Default: 100. + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[HTTPValidationError | UsersPublic] + """ + + + kwargs = _get_kwargs( + skip=skip, +limit=limit, + + ) + + response = await client.get_async_httpx_client().request( + **kwargs + ) + + return _build_response(client=client, response=response) + +async def asyncio( + *, + client: AuthenticatedClient, + skip: int | Unset = 0, + limit: int | Unset = 100, + +) -> HTTPValidationError | UsersPublic | None: + """ Read Users + + Retrieve users. + + Args: + skip (int | Unset): Default: 0. + limit (int | Unset): Default: 100. + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + HTTPValidationError | UsersPublic + """ + + + return (await asyncio_detailed( + client=client, +skip=skip, +limit=limit, + + )).parsed diff --git a/kindred-sdk/personal_crm_client/api/users/users_register_user.py b/kindred-sdk/personal_crm_client/api/users/users_register_user.py new file mode 100644 index 00000000..664abefa --- /dev/null +++ b/kindred-sdk/personal_crm_client/api/users/users_register_user.py @@ -0,0 +1,195 @@ +from http import HTTPStatus +from typing import Any, cast +from urllib.parse import quote + +import httpx + +from ...client import AuthenticatedClient, Client +from ...types import Response, UNSET +from ... import errors + +from ...models.http_validation_error import HTTPValidationError +from ...models.user_public import UserPublic +from ...models.user_register import UserRegister +from typing import cast + + + +def _get_kwargs( + *, + body: UserRegister, + +) -> dict[str, Any]: + headers: dict[str, Any] = {} + + + + + + + _kwargs: dict[str, Any] = { + "method": "post", + "url": "/api/v1/users/signup", + } + + _kwargs["json"] = body.to_dict() + + + headers["Content-Type"] = "application/json" + + _kwargs["headers"] = headers + return _kwargs + + + +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> HTTPValidationError | UserPublic | None: + if response.status_code == 200: + response_200 = UserPublic.from_dict(response.json()) + + + + return response_200 + + if response.status_code == 422: + response_422 = HTTPValidationError.from_dict(response.json()) + + + + return response_422 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[HTTPValidationError | UserPublic]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + *, + client: AuthenticatedClient | Client, + body: UserRegister, + +) -> Response[HTTPValidationError | UserPublic]: + """ Register User + + Create new user without the need to be logged in. + + Args: + body (UserRegister): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[HTTPValidationError | UserPublic] + """ + + + kwargs = _get_kwargs( + body=body, + + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + +def sync( + *, + client: AuthenticatedClient | Client, + body: UserRegister, + +) -> HTTPValidationError | UserPublic | None: + """ Register User + + Create new user without the need to be logged in. + + Args: + body (UserRegister): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + HTTPValidationError | UserPublic + """ + + + return sync_detailed( + client=client, +body=body, + + ).parsed + +async def asyncio_detailed( + *, + client: AuthenticatedClient | Client, + body: UserRegister, + +) -> Response[HTTPValidationError | UserPublic]: + """ Register User + + Create new user without the need to be logged in. + + Args: + body (UserRegister): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[HTTPValidationError | UserPublic] + """ + + + kwargs = _get_kwargs( + body=body, + + ) + + response = await client.get_async_httpx_client().request( + **kwargs + ) + + return _build_response(client=client, response=response) + +async def asyncio( + *, + client: AuthenticatedClient | Client, + body: UserRegister, + +) -> HTTPValidationError | UserPublic | None: + """ Register User + + Create new user without the need to be logged in. + + Args: + body (UserRegister): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + HTTPValidationError | UserPublic + """ + + + return (await asyncio_detailed( + client=client, +body=body, + + )).parsed diff --git a/kindred-sdk/personal_crm_client/api/users/users_update_password_me.py b/kindred-sdk/personal_crm_client/api/users/users_update_password_me.py new file mode 100644 index 00000000..00fe0940 --- /dev/null +++ b/kindred-sdk/personal_crm_client/api/users/users_update_password_me.py @@ -0,0 +1,195 @@ +from http import HTTPStatus +from typing import Any, cast +from urllib.parse import quote + +import httpx + +from ...client import AuthenticatedClient, Client +from ...types import Response, UNSET +from ... import errors + +from ...models.http_validation_error import HTTPValidationError +from ...models.message import Message +from ...models.update_password import UpdatePassword +from typing import cast + + + +def _get_kwargs( + *, + body: UpdatePassword, + +) -> dict[str, Any]: + headers: dict[str, Any] = {} + + + + + + + _kwargs: dict[str, Any] = { + "method": "patch", + "url": "/api/v1/users/me/password", + } + + _kwargs["json"] = body.to_dict() + + + headers["Content-Type"] = "application/json" + + _kwargs["headers"] = headers + return _kwargs + + + +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> HTTPValidationError | Message | None: + if response.status_code == 200: + response_200 = Message.from_dict(response.json()) + + + + return response_200 + + if response.status_code == 422: + response_422 = HTTPValidationError.from_dict(response.json()) + + + + return response_422 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[HTTPValidationError | Message]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + *, + client: AuthenticatedClient, + body: UpdatePassword, + +) -> Response[HTTPValidationError | Message]: + """ Update Password Me + + Update own password. + + Args: + body (UpdatePassword): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[HTTPValidationError | Message] + """ + + + kwargs = _get_kwargs( + body=body, + + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + +def sync( + *, + client: AuthenticatedClient, + body: UpdatePassword, + +) -> HTTPValidationError | Message | None: + """ Update Password Me + + Update own password. + + Args: + body (UpdatePassword): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + HTTPValidationError | Message + """ + + + return sync_detailed( + client=client, +body=body, + + ).parsed + +async def asyncio_detailed( + *, + client: AuthenticatedClient, + body: UpdatePassword, + +) -> Response[HTTPValidationError | Message]: + """ Update Password Me + + Update own password. + + Args: + body (UpdatePassword): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[HTTPValidationError | Message] + """ + + + kwargs = _get_kwargs( + body=body, + + ) + + response = await client.get_async_httpx_client().request( + **kwargs + ) + + return _build_response(client=client, response=response) + +async def asyncio( + *, + client: AuthenticatedClient, + body: UpdatePassword, + +) -> HTTPValidationError | Message | None: + """ Update Password Me + + Update own password. + + Args: + body (UpdatePassword): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + HTTPValidationError | Message + """ + + + return (await asyncio_detailed( + client=client, +body=body, + + )).parsed diff --git a/kindred-sdk/personal_crm_client/api/users/users_update_user.py b/kindred-sdk/personal_crm_client/api/users/users_update_user.py new file mode 100644 index 00000000..be4f839f --- /dev/null +++ b/kindred-sdk/personal_crm_client/api/users/users_update_user.py @@ -0,0 +1,209 @@ +from http import HTTPStatus +from typing import Any, cast +from urllib.parse import quote + +import httpx + +from ...client import AuthenticatedClient, Client +from ...types import Response, UNSET +from ... import errors + +from ...models.http_validation_error import HTTPValidationError +from ...models.user_public import UserPublic +from ...models.user_update import UserUpdate +from typing import cast +from uuid import UUID + + + +def _get_kwargs( + user_id: UUID, + *, + body: UserUpdate, + +) -> dict[str, Any]: + headers: dict[str, Any] = {} + + + + + + + _kwargs: dict[str, Any] = { + "method": "patch", + "url": "/api/v1/users/{user_id}".format(user_id=quote(str(user_id), safe=""),), + } + + _kwargs["json"] = body.to_dict() + + + headers["Content-Type"] = "application/json" + + _kwargs["headers"] = headers + return _kwargs + + + +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> HTTPValidationError | UserPublic | None: + if response.status_code == 200: + response_200 = UserPublic.from_dict(response.json()) + + + + return response_200 + + if response.status_code == 422: + response_422 = HTTPValidationError.from_dict(response.json()) + + + + return response_422 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[HTTPValidationError | UserPublic]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + user_id: UUID, + *, + client: AuthenticatedClient, + body: UserUpdate, + +) -> Response[HTTPValidationError | UserPublic]: + """ Update User + + Update a user. + + Args: + user_id (UUID): + body (UserUpdate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[HTTPValidationError | UserPublic] + """ + + + kwargs = _get_kwargs( + user_id=user_id, +body=body, + + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + +def sync( + user_id: UUID, + *, + client: AuthenticatedClient, + body: UserUpdate, + +) -> HTTPValidationError | UserPublic | None: + """ Update User + + Update a user. + + Args: + user_id (UUID): + body (UserUpdate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + HTTPValidationError | UserPublic + """ + + + return sync_detailed( + user_id=user_id, +client=client, +body=body, + + ).parsed + +async def asyncio_detailed( + user_id: UUID, + *, + client: AuthenticatedClient, + body: UserUpdate, + +) -> Response[HTTPValidationError | UserPublic]: + """ Update User + + Update a user. + + Args: + user_id (UUID): + body (UserUpdate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[HTTPValidationError | UserPublic] + """ + + + kwargs = _get_kwargs( + user_id=user_id, +body=body, + + ) + + response = await client.get_async_httpx_client().request( + **kwargs + ) + + return _build_response(client=client, response=response) + +async def asyncio( + user_id: UUID, + *, + client: AuthenticatedClient, + body: UserUpdate, + +) -> HTTPValidationError | UserPublic | None: + """ Update User + + Update a user. + + Args: + user_id (UUID): + body (UserUpdate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + HTTPValidationError | UserPublic + """ + + + return (await asyncio_detailed( + user_id=user_id, +client=client, +body=body, + + )).parsed diff --git a/kindred-sdk/personal_crm_client/api/users/users_update_user_me.py b/kindred-sdk/personal_crm_client/api/users/users_update_user_me.py new file mode 100644 index 00000000..a06570c0 --- /dev/null +++ b/kindred-sdk/personal_crm_client/api/users/users_update_user_me.py @@ -0,0 +1,195 @@ +from http import HTTPStatus +from typing import Any, cast +from urllib.parse import quote + +import httpx + +from ...client import AuthenticatedClient, Client +from ...types import Response, UNSET +from ... import errors + +from ...models.http_validation_error import HTTPValidationError +from ...models.user_public import UserPublic +from ...models.user_update_me import UserUpdateMe +from typing import cast + + + +def _get_kwargs( + *, + body: UserUpdateMe, + +) -> dict[str, Any]: + headers: dict[str, Any] = {} + + + + + + + _kwargs: dict[str, Any] = { + "method": "patch", + "url": "/api/v1/users/me", + } + + _kwargs["json"] = body.to_dict() + + + headers["Content-Type"] = "application/json" + + _kwargs["headers"] = headers + return _kwargs + + + +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> HTTPValidationError | UserPublic | None: + if response.status_code == 200: + response_200 = UserPublic.from_dict(response.json()) + + + + return response_200 + + if response.status_code == 422: + response_422 = HTTPValidationError.from_dict(response.json()) + + + + return response_422 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[HTTPValidationError | UserPublic]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + *, + client: AuthenticatedClient, + body: UserUpdateMe, + +) -> Response[HTTPValidationError | UserPublic]: + """ Update User Me + + Update own user. + + Args: + body (UserUpdateMe): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[HTTPValidationError | UserPublic] + """ + + + kwargs = _get_kwargs( + body=body, + + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + +def sync( + *, + client: AuthenticatedClient, + body: UserUpdateMe, + +) -> HTTPValidationError | UserPublic | None: + """ Update User Me + + Update own user. + + Args: + body (UserUpdateMe): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + HTTPValidationError | UserPublic + """ + + + return sync_detailed( + client=client, +body=body, + + ).parsed + +async def asyncio_detailed( + *, + client: AuthenticatedClient, + body: UserUpdateMe, + +) -> Response[HTTPValidationError | UserPublic]: + """ Update User Me + + Update own user. + + Args: + body (UserUpdateMe): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[HTTPValidationError | UserPublic] + """ + + + kwargs = _get_kwargs( + body=body, + + ) + + response = await client.get_async_httpx_client().request( + **kwargs + ) + + return _build_response(client=client, response=response) + +async def asyncio( + *, + client: AuthenticatedClient, + body: UserUpdateMe, + +) -> HTTPValidationError | UserPublic | None: + """ Update User Me + + Update own user. + + Args: + body (UserUpdateMe): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + HTTPValidationError | UserPublic + """ + + + return (await asyncio_detailed( + client=client, +body=body, + + )).parsed diff --git a/kindred-sdk/personal_crm_client/api/utils/__init__.py b/kindred-sdk/personal_crm_client/api/utils/__init__.py new file mode 100644 index 00000000..c9921b5f --- /dev/null +++ b/kindred-sdk/personal_crm_client/api/utils/__init__.py @@ -0,0 +1 @@ +""" Contains endpoint functions for accessing the API """ diff --git a/kindred-sdk/personal_crm_client/api/utils/utils_health_check.py b/kindred-sdk/personal_crm_client/api/utils/utils_health_check.py new file mode 100644 index 00000000..3e120223 --- /dev/null +++ b/kindred-sdk/personal_crm_client/api/utils/utils_health_check.py @@ -0,0 +1,145 @@ +from http import HTTPStatus +from typing import Any, cast +from urllib.parse import quote + +import httpx + +from ...client import AuthenticatedClient, Client +from ...types import Response, UNSET +from ... import errors + + + + +def _get_kwargs( + +) -> dict[str, Any]: + + + + + + + _kwargs: dict[str, Any] = { + "method": "get", + "url": "/api/v1/utils/health-check/", + } + + + return _kwargs + + + +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> bool | None: + if response.status_code == 200: + response_200 = cast(bool, response.json()) + return response_200 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[bool]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + *, + client: AuthenticatedClient | Client, + +) -> Response[bool]: + """ Health Check + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[bool] + """ + + + kwargs = _get_kwargs( + + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + +def sync( + *, + client: AuthenticatedClient | Client, + +) -> bool | None: + """ Health Check + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + bool + """ + + + return sync_detailed( + client=client, + + ).parsed + +async def asyncio_detailed( + *, + client: AuthenticatedClient | Client, + +) -> Response[bool]: + """ Health Check + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[bool] + """ + + + kwargs = _get_kwargs( + + ) + + response = await client.get_async_httpx_client().request( + **kwargs + ) + + return _build_response(client=client, response=response) + +async def asyncio( + *, + client: AuthenticatedClient | Client, + +) -> bool | None: + """ Health Check + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + bool + """ + + + return (await asyncio_detailed( + client=client, + + )).parsed diff --git a/kindred-sdk/personal_crm_client/api/utils/utils_test_email.py b/kindred-sdk/personal_crm_client/api/utils/utils_test_email.py new file mode 100644 index 00000000..fd1799ed --- /dev/null +++ b/kindred-sdk/personal_crm_client/api/utils/utils_test_email.py @@ -0,0 +1,195 @@ +from http import HTTPStatus +from typing import Any, cast +from urllib.parse import quote + +import httpx + +from ...client import AuthenticatedClient, Client +from ...types import Response, UNSET +from ... import errors + +from ...models.http_validation_error import HTTPValidationError +from ...models.message import Message +from typing import cast + + + +def _get_kwargs( + *, + email_to: str, + +) -> dict[str, Any]: + + + + + params: dict[str, Any] = {} + + params["email_to"] = email_to + + + params = {k: v for k, v in params.items() if v is not UNSET and v is not None} + + + _kwargs: dict[str, Any] = { + "method": "post", + "url": "/api/v1/utils/test-email/", + "params": params, + } + + + return _kwargs + + + +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> HTTPValidationError | Message | None: + if response.status_code == 201: + response_201 = Message.from_dict(response.json()) + + + + return response_201 + + if response.status_code == 422: + response_422 = HTTPValidationError.from_dict(response.json()) + + + + return response_422 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[HTTPValidationError | Message]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + *, + client: AuthenticatedClient, + email_to: str, + +) -> Response[HTTPValidationError | Message]: + """ Test Email + + Test emails. + + Args: + email_to (str): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[HTTPValidationError | Message] + """ + + + kwargs = _get_kwargs( + email_to=email_to, + + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + +def sync( + *, + client: AuthenticatedClient, + email_to: str, + +) -> HTTPValidationError | Message | None: + """ Test Email + + Test emails. + + Args: + email_to (str): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + HTTPValidationError | Message + """ + + + return sync_detailed( + client=client, +email_to=email_to, + + ).parsed + +async def asyncio_detailed( + *, + client: AuthenticatedClient, + email_to: str, + +) -> Response[HTTPValidationError | Message]: + """ Test Email + + Test emails. + + Args: + email_to (str): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[HTTPValidationError | Message] + """ + + + kwargs = _get_kwargs( + email_to=email_to, + + ) + + response = await client.get_async_httpx_client().request( + **kwargs + ) + + return _build_response(client=client, response=response) + +async def asyncio( + *, + client: AuthenticatedClient, + email_to: str, + +) -> HTTPValidationError | Message | None: + """ Test Email + + Test emails. + + Args: + email_to (str): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + HTTPValidationError | Message + """ + + + return (await asyncio_detailed( + client=client, +email_to=email_to, + + )).parsed diff --git a/kindred-sdk/personal_crm_client/api/webhooks/__init__.py b/kindred-sdk/personal_crm_client/api/webhooks/__init__.py new file mode 100644 index 00000000..c9921b5f --- /dev/null +++ b/kindred-sdk/personal_crm_client/api/webhooks/__init__.py @@ -0,0 +1 @@ +""" Contains endpoint functions for accessing the API """ diff --git a/kindred-sdk/personal_crm_client/api/webhooks/webhooks_create_webhook.py b/kindred-sdk/personal_crm_client/api/webhooks/webhooks_create_webhook.py new file mode 100644 index 00000000..c053835f --- /dev/null +++ b/kindred-sdk/personal_crm_client/api/webhooks/webhooks_create_webhook.py @@ -0,0 +1,191 @@ +from http import HTTPStatus +from typing import Any, cast +from urllib.parse import quote + +import httpx + +from ...client import AuthenticatedClient, Client +from ...types import Response, UNSET +from ... import errors + +from ...models.http_validation_error import HTTPValidationError +from ...models.webhook_endpoint_base import WebhookEndpointBase +from typing import cast + + + +def _get_kwargs( + *, + body: WebhookEndpointBase, + +) -> dict[str, Any]: + headers: dict[str, Any] = {} + + + + + + + _kwargs: dict[str, Any] = { + "method": "post", + "url": "/api/v1/webhooks/", + } + + _kwargs["json"] = body.to_dict() + + + headers["Content-Type"] = "application/json" + + _kwargs["headers"] = headers + return _kwargs + + + +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Any | HTTPValidationError | None: + if response.status_code == 200: + response_200 = response.json() + return response_200 + + if response.status_code == 422: + response_422 = HTTPValidationError.from_dict(response.json()) + + + + return response_422 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[Any | HTTPValidationError]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + *, + client: AuthenticatedClient, + body: WebhookEndpointBase, + +) -> Response[Any | HTTPValidationError]: + """ Create Webhook + + Create a new webhook endpoint. + + Args: + body (WebhookEndpointBase): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Any | HTTPValidationError] + """ + + + kwargs = _get_kwargs( + body=body, + + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + +def sync( + *, + client: AuthenticatedClient, + body: WebhookEndpointBase, + +) -> Any | HTTPValidationError | None: + """ Create Webhook + + Create a new webhook endpoint. + + Args: + body (WebhookEndpointBase): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Any | HTTPValidationError + """ + + + return sync_detailed( + client=client, +body=body, + + ).parsed + +async def asyncio_detailed( + *, + client: AuthenticatedClient, + body: WebhookEndpointBase, + +) -> Response[Any | HTTPValidationError]: + """ Create Webhook + + Create a new webhook endpoint. + + Args: + body (WebhookEndpointBase): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Any | HTTPValidationError] + """ + + + kwargs = _get_kwargs( + body=body, + + ) + + response = await client.get_async_httpx_client().request( + **kwargs + ) + + return _build_response(client=client, response=response) + +async def asyncio( + *, + client: AuthenticatedClient, + body: WebhookEndpointBase, + +) -> Any | HTTPValidationError | None: + """ Create Webhook + + Create a new webhook endpoint. + + Args: + body (WebhookEndpointBase): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Any | HTTPValidationError + """ + + + return (await asyncio_detailed( + client=client, +body=body, + + )).parsed diff --git a/kindred-sdk/personal_crm_client/api/webhooks/webhooks_delete_webhook.py b/kindred-sdk/personal_crm_client/api/webhooks/webhooks_delete_webhook.py new file mode 100644 index 00000000..aca2cff4 --- /dev/null +++ b/kindred-sdk/personal_crm_client/api/webhooks/webhooks_delete_webhook.py @@ -0,0 +1,184 @@ +from http import HTTPStatus +from typing import Any, cast +from urllib.parse import quote + +import httpx + +from ...client import AuthenticatedClient, Client +from ...types import Response, UNSET +from ... import errors + +from ...models.http_validation_error import HTTPValidationError +from typing import cast +from uuid import UUID + + + +def _get_kwargs( + webhook_id: UUID, + +) -> dict[str, Any]: + + + + + + + _kwargs: dict[str, Any] = { + "method": "delete", + "url": "/api/v1/webhooks/{webhook_id}".format(webhook_id=quote(str(webhook_id), safe=""),), + } + + + return _kwargs + + + +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Any | HTTPValidationError | None: + if response.status_code == 200: + response_200 = response.json() + return response_200 + + if response.status_code == 422: + response_422 = HTTPValidationError.from_dict(response.json()) + + + + return response_422 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[Any | HTTPValidationError]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + webhook_id: UUID, + *, + client: AuthenticatedClient, + +) -> Response[Any | HTTPValidationError]: + """ Delete Webhook + + Delete a webhook endpoint. + + Args: + webhook_id (UUID): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Any | HTTPValidationError] + """ + + + kwargs = _get_kwargs( + webhook_id=webhook_id, + + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + +def sync( + webhook_id: UUID, + *, + client: AuthenticatedClient, + +) -> Any | HTTPValidationError | None: + """ Delete Webhook + + Delete a webhook endpoint. + + Args: + webhook_id (UUID): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Any | HTTPValidationError + """ + + + return sync_detailed( + webhook_id=webhook_id, +client=client, + + ).parsed + +async def asyncio_detailed( + webhook_id: UUID, + *, + client: AuthenticatedClient, + +) -> Response[Any | HTTPValidationError]: + """ Delete Webhook + + Delete a webhook endpoint. + + Args: + webhook_id (UUID): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Any | HTTPValidationError] + """ + + + kwargs = _get_kwargs( + webhook_id=webhook_id, + + ) + + response = await client.get_async_httpx_client().request( + **kwargs + ) + + return _build_response(client=client, response=response) + +async def asyncio( + webhook_id: UUID, + *, + client: AuthenticatedClient, + +) -> Any | HTTPValidationError | None: + """ Delete Webhook + + Delete a webhook endpoint. + + Args: + webhook_id (UUID): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Any | HTTPValidationError + """ + + + return (await asyncio_detailed( + webhook_id=webhook_id, +client=client, + + )).parsed diff --git a/kindred-sdk/personal_crm_client/api/webhooks/webhooks_inbound_webhook.py b/kindred-sdk/personal_crm_client/api/webhooks/webhooks_inbound_webhook.py new file mode 100644 index 00000000..adb58b6b --- /dev/null +++ b/kindred-sdk/personal_crm_client/api/webhooks/webhooks_inbound_webhook.py @@ -0,0 +1,240 @@ +from http import HTTPStatus +from typing import Any, cast +from urllib.parse import quote + +import httpx + +from ...client import AuthenticatedClient, Client +from ...types import Response, UNSET +from ... import errors + +from ...models.http_validation_error import HTTPValidationError +from ...models.webhooks_inbound_webhook_payload import WebhooksInboundWebhookPayload +from typing import cast + + + +def _get_kwargs( + api_key: str, + *, + body: WebhooksInboundWebhookPayload, + +) -> dict[str, Any]: + headers: dict[str, Any] = {} + + + + + + + _kwargs: dict[str, Any] = { + "method": "post", + "url": "/api/v1/webhooks/inbound/{api_key}".format(api_key=quote(str(api_key), safe=""),), + } + + _kwargs["json"] = body.to_dict() + + + headers["Content-Type"] = "application/json" + + _kwargs["headers"] = headers + return _kwargs + + + +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Any | HTTPValidationError | None: + if response.status_code == 200: + response_200 = response.json() + return response_200 + + if response.status_code == 422: + response_422 = HTTPValidationError.from_dict(response.json()) + + + + return response_422 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[Any | HTTPValidationError]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + api_key: str, + *, + client: AuthenticatedClient | Client, + body: WebhooksInboundWebhookPayload, + +) -> Response[Any | HTTPValidationError]: + r""" Inbound Webhook + + Inbound webhook receiver for external integrations (n8n, Aqara, etc.). + + Payload format: + { + \"contact_email\": \"user@example.com\", // OR + \"contact_name\": \"John Doe\", // lookup by name + \"channel\": \"call\", // InteractionChannel value + \"notes\": \"Called about project X\", // optional + \"occurred_at\": \"2024-01-15T10:00:00Z\" // optional, defaults to now + } + + Args: + api_key (str): + body (WebhooksInboundWebhookPayload): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Any | HTTPValidationError] + """ + + + kwargs = _get_kwargs( + api_key=api_key, +body=body, + + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + +def sync( + api_key: str, + *, + client: AuthenticatedClient | Client, + body: WebhooksInboundWebhookPayload, + +) -> Any | HTTPValidationError | None: + r""" Inbound Webhook + + Inbound webhook receiver for external integrations (n8n, Aqara, etc.). + + Payload format: + { + \"contact_email\": \"user@example.com\", // OR + \"contact_name\": \"John Doe\", // lookup by name + \"channel\": \"call\", // InteractionChannel value + \"notes\": \"Called about project X\", // optional + \"occurred_at\": \"2024-01-15T10:00:00Z\" // optional, defaults to now + } + + Args: + api_key (str): + body (WebhooksInboundWebhookPayload): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Any | HTTPValidationError + """ + + + return sync_detailed( + api_key=api_key, +client=client, +body=body, + + ).parsed + +async def asyncio_detailed( + api_key: str, + *, + client: AuthenticatedClient | Client, + body: WebhooksInboundWebhookPayload, + +) -> Response[Any | HTTPValidationError]: + r""" Inbound Webhook + + Inbound webhook receiver for external integrations (n8n, Aqara, etc.). + + Payload format: + { + \"contact_email\": \"user@example.com\", // OR + \"contact_name\": \"John Doe\", // lookup by name + \"channel\": \"call\", // InteractionChannel value + \"notes\": \"Called about project X\", // optional + \"occurred_at\": \"2024-01-15T10:00:00Z\" // optional, defaults to now + } + + Args: + api_key (str): + body (WebhooksInboundWebhookPayload): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Any | HTTPValidationError] + """ + + + kwargs = _get_kwargs( + api_key=api_key, +body=body, + + ) + + response = await client.get_async_httpx_client().request( + **kwargs + ) + + return _build_response(client=client, response=response) + +async def asyncio( + api_key: str, + *, + client: AuthenticatedClient | Client, + body: WebhooksInboundWebhookPayload, + +) -> Any | HTTPValidationError | None: + r""" Inbound Webhook + + Inbound webhook receiver for external integrations (n8n, Aqara, etc.). + + Payload format: + { + \"contact_email\": \"user@example.com\", // OR + \"contact_name\": \"John Doe\", // lookup by name + \"channel\": \"call\", // InteractionChannel value + \"notes\": \"Called about project X\", // optional + \"occurred_at\": \"2024-01-15T10:00:00Z\" // optional, defaults to now + } + + Args: + api_key (str): + body (WebhooksInboundWebhookPayload): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Any | HTTPValidationError + """ + + + return (await asyncio_detailed( + api_key=api_key, +client=client, +body=body, + + )).parsed diff --git a/kindred-sdk/personal_crm_client/api/webhooks/webhooks_list_webhooks.py b/kindred-sdk/personal_crm_client/api/webhooks/webhooks_list_webhooks.py new file mode 100644 index 00000000..58c207c1 --- /dev/null +++ b/kindred-sdk/personal_crm_client/api/webhooks/webhooks_list_webhooks.py @@ -0,0 +1,108 @@ +from http import HTTPStatus +from typing import Any, cast +from urllib.parse import quote + +import httpx + +from ...client import AuthenticatedClient, Client +from ...types import Response, UNSET +from ... import errors + + + + +def _get_kwargs( + +) -> dict[str, Any]: + + + + + + + _kwargs: dict[str, Any] = { + "method": "get", + "url": "/api/v1/webhooks/", + } + + + return _kwargs + + + +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Any | None: + if response.status_code == 200: + return None + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[Any]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + *, + client: AuthenticatedClient, + +) -> Response[Any]: + """ List Webhooks + + List all webhook endpoints for the user. + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Any] + """ + + + kwargs = _get_kwargs( + + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + + +async def asyncio_detailed( + *, + client: AuthenticatedClient, + +) -> Response[Any]: + """ List Webhooks + + List all webhook endpoints for the user. + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Any] + """ + + + kwargs = _get_kwargs( + + ) + + response = await client.get_async_httpx_client().request( + **kwargs + ) + + return _build_response(client=client, response=response) + diff --git a/kindred-sdk/personal_crm_client/api/webhooks/webhooks_update_webhook.py b/kindred-sdk/personal_crm_client/api/webhooks/webhooks_update_webhook.py new file mode 100644 index 00000000..ddda750d --- /dev/null +++ b/kindred-sdk/personal_crm_client/api/webhooks/webhooks_update_webhook.py @@ -0,0 +1,205 @@ +from http import HTTPStatus +from typing import Any, cast +from urllib.parse import quote + +import httpx + +from ...client import AuthenticatedClient, Client +from ...types import Response, UNSET +from ... import errors + +from ...models.http_validation_error import HTTPValidationError +from ...models.webhook_endpoint_base import WebhookEndpointBase +from typing import cast +from uuid import UUID + + + +def _get_kwargs( + webhook_id: UUID, + *, + body: WebhookEndpointBase, + +) -> dict[str, Any]: + headers: dict[str, Any] = {} + + + + + + + _kwargs: dict[str, Any] = { + "method": "patch", + "url": "/api/v1/webhooks/{webhook_id}".format(webhook_id=quote(str(webhook_id), safe=""),), + } + + _kwargs["json"] = body.to_dict() + + + headers["Content-Type"] = "application/json" + + _kwargs["headers"] = headers + return _kwargs + + + +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Any | HTTPValidationError | None: + if response.status_code == 200: + response_200 = response.json() + return response_200 + + if response.status_code == 422: + response_422 = HTTPValidationError.from_dict(response.json()) + + + + return response_422 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[Any | HTTPValidationError]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + webhook_id: UUID, + *, + client: AuthenticatedClient, + body: WebhookEndpointBase, + +) -> Response[Any | HTTPValidationError]: + """ Update Webhook + + Update a webhook endpoint. + + Args: + webhook_id (UUID): + body (WebhookEndpointBase): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Any | HTTPValidationError] + """ + + + kwargs = _get_kwargs( + webhook_id=webhook_id, +body=body, + + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + +def sync( + webhook_id: UUID, + *, + client: AuthenticatedClient, + body: WebhookEndpointBase, + +) -> Any | HTTPValidationError | None: + """ Update Webhook + + Update a webhook endpoint. + + Args: + webhook_id (UUID): + body (WebhookEndpointBase): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Any | HTTPValidationError + """ + + + return sync_detailed( + webhook_id=webhook_id, +client=client, +body=body, + + ).parsed + +async def asyncio_detailed( + webhook_id: UUID, + *, + client: AuthenticatedClient, + body: WebhookEndpointBase, + +) -> Response[Any | HTTPValidationError]: + """ Update Webhook + + Update a webhook endpoint. + + Args: + webhook_id (UUID): + body (WebhookEndpointBase): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Any | HTTPValidationError] + """ + + + kwargs = _get_kwargs( + webhook_id=webhook_id, +body=body, + + ) + + response = await client.get_async_httpx_client().request( + **kwargs + ) + + return _build_response(client=client, response=response) + +async def asyncio( + webhook_id: UUID, + *, + client: AuthenticatedClient, + body: WebhookEndpointBase, + +) -> Any | HTTPValidationError | None: + """ Update Webhook + + Update a webhook endpoint. + + Args: + webhook_id (UUID): + body (WebhookEndpointBase): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Any | HTTPValidationError + """ + + + return (await asyncio_detailed( + webhook_id=webhook_id, +client=client, +body=body, + + )).parsed diff --git a/kindred-sdk/personal_crm_client/client.py b/kindred-sdk/personal_crm_client/client.py new file mode 100644 index 00000000..5eeb05a0 --- /dev/null +++ b/kindred-sdk/personal_crm_client/client.py @@ -0,0 +1,271 @@ +import ssl +from typing import Any + +from attrs import define, field, evolve +import httpx + + + + + +@define +class Client: + """A class for keeping track of data related to the API + + The following are accepted as keyword arguments and will be used to construct httpx Clients internally: + + ``base_url``: The base URL for the API, all requests are made to a relative path to this URL + + ``cookies``: A dictionary of cookies to be sent with every request + + ``headers``: A dictionary of headers to be sent with every request + + ``timeout``: The maximum amount of a time a request can take. API functions will raise + httpx.TimeoutException if this is exceeded. + + ``verify_ssl``: Whether or not to verify the SSL certificate of the API server. This should be True in production, + but can be set to False for testing purposes. + + ``follow_redirects``: Whether or not to follow redirects. Default value is False. + + ``httpx_args``: A dictionary of additional arguments to be passed to the ``httpx.Client`` and ``httpx.AsyncClient`` constructor. + + + Attributes: + raise_on_unexpected_status: Whether or not to raise an errors.UnexpectedStatus if the API returns a + status code that was not documented in the source OpenAPI document. Can also be provided as a keyword + argument to the constructor. + """ + raise_on_unexpected_status: bool = field(default=False, kw_only=True) + _base_url: str = field(alias="base_url") + _cookies: dict[str, str] = field(factory=dict, kw_only=True, alias="cookies") + _headers: dict[str, str] = field(factory=dict, kw_only=True, alias="headers") + _timeout: httpx.Timeout | None = field(default=None, kw_only=True, alias="timeout") + _verify_ssl: str | bool | ssl.SSLContext = field(default=True, kw_only=True, alias="verify_ssl") + _follow_redirects: bool = field(default=False, kw_only=True, alias="follow_redirects") + _httpx_args: dict[str, Any] = field(factory=dict, kw_only=True, alias="httpx_args") + _client: httpx.Client | None = field(default=None, init=False) + _async_client: httpx.AsyncClient | None = field(default=None, init=False) + + def with_headers(self, headers: dict[str, str]) -> "Client": + """Get a new client matching this one with additional headers""" + if self._client is not None: + self._client.headers.update(headers) + if self._async_client is not None: + self._async_client.headers.update(headers) + return evolve(self, headers={**self._headers, **headers}) + + def with_cookies(self, cookies: dict[str, str]) -> "Client": + """Get a new client matching this one with additional cookies""" + if self._client is not None: + self._client.cookies.update(cookies) + if self._async_client is not None: + self._async_client.cookies.update(cookies) + return evolve(self, cookies={**self._cookies, **cookies}) + + def with_timeout(self, timeout: httpx.Timeout) -> "Client": + """Get a new client matching this one with a new timeout configuration""" + if self._client is not None: + self._client.timeout = timeout + if self._async_client is not None: + self._async_client.timeout = timeout + return evolve(self, timeout=timeout) + + def set_httpx_client(self, client: httpx.Client) -> "Client": + """Manually set the underlying httpx.Client + + **NOTE**: This will override any other settings on the client, including cookies, headers, and timeout. + """ + self._client = client + return self + + def get_httpx_client(self) -> httpx.Client: + """Get the underlying httpx.Client, constructing a new one if not previously set""" + if self._client is None: + self._client = httpx.Client( + base_url=self._base_url, + cookies=self._cookies, + headers=self._headers, + timeout=self._timeout, + verify=self._verify_ssl, + follow_redirects=self._follow_redirects, + **self._httpx_args, + ) + return self._client + + def __enter__(self) -> "Client": + """Enter a context manager for self.client—you cannot enter twice (see httpx docs)""" + self.get_httpx_client().__enter__() + return self + + def __exit__(self, *args: Any, **kwargs: Any) -> None: + """Exit a context manager for internal httpx.Client (see httpx docs)""" + self.get_httpx_client().__exit__(*args, **kwargs) + + def set_async_httpx_client(self, async_client: httpx.AsyncClient) -> "Client": + """Manually set the underlying httpx.AsyncClient + + **NOTE**: This will override any other settings on the client, including cookies, headers, and timeout. + """ + self._async_client = async_client + return self + + def get_async_httpx_client(self) -> httpx.AsyncClient: + """Get the underlying httpx.AsyncClient, constructing a new one if not previously set""" + if self._async_client is None: + self._async_client = httpx.AsyncClient( + base_url=self._base_url, + cookies=self._cookies, + headers=self._headers, + timeout=self._timeout, + verify=self._verify_ssl, + follow_redirects=self._follow_redirects, + **self._httpx_args, + ) + return self._async_client + + async def __aenter__(self) -> "Client": + """Enter a context manager for underlying httpx.AsyncClient—you cannot enter twice (see httpx docs)""" + await self.get_async_httpx_client().__aenter__() + return self + + async def __aexit__(self, *args: Any, **kwargs: Any) -> None: + """Exit a context manager for underlying httpx.AsyncClient (see httpx docs)""" + await self.get_async_httpx_client().__aexit__(*args, **kwargs) + + +@define +class AuthenticatedClient: + """A Client which has been authenticated for use on secured endpoints + + The following are accepted as keyword arguments and will be used to construct httpx Clients internally: + + ``base_url``: The base URL for the API, all requests are made to a relative path to this URL + + ``cookies``: A dictionary of cookies to be sent with every request + + ``headers``: A dictionary of headers to be sent with every request + + ``timeout``: The maximum amount of a time a request can take. API functions will raise + httpx.TimeoutException if this is exceeded. + + ``verify_ssl``: Whether or not to verify the SSL certificate of the API server. This should be True in production, + but can be set to False for testing purposes. + + ``follow_redirects``: Whether or not to follow redirects. Default value is False. + + ``httpx_args``: A dictionary of additional arguments to be passed to the ``httpx.Client`` and ``httpx.AsyncClient`` constructor. + + + Attributes: + raise_on_unexpected_status: Whether or not to raise an errors.UnexpectedStatus if the API returns a + status code that was not documented in the source OpenAPI document. Can also be provided as a keyword + argument to the constructor. + token: The token to use for authentication + prefix: The prefix to use for the Authorization header + auth_header_name: The name of the Authorization header + """ + + raise_on_unexpected_status: bool = field(default=False, kw_only=True) + _base_url: str = field(alias="base_url") + _cookies: dict[str, str] = field(factory=dict, kw_only=True, alias="cookies") + _headers: dict[str, str] = field(factory=dict, kw_only=True, alias="headers") + _timeout: httpx.Timeout | None = field(default=None, kw_only=True, alias="timeout") + _verify_ssl: str | bool | ssl.SSLContext = field(default=True, kw_only=True, alias="verify_ssl") + _follow_redirects: bool = field(default=False, kw_only=True, alias="follow_redirects") + _httpx_args: dict[str, Any] = field(factory=dict, kw_only=True, alias="httpx_args") + _client: httpx.Client | None = field(default=None, init=False) + _async_client: httpx.AsyncClient | None = field(default=None, init=False) + + token: str + prefix: str = "Bearer" + auth_header_name: str = "Authorization" + + def with_headers(self, headers: dict[str, str]) -> "AuthenticatedClient": + """Get a new client matching this one with additional headers""" + if self._client is not None: + self._client.headers.update(headers) + if self._async_client is not None: + self._async_client.headers.update(headers) + return evolve(self, headers={**self._headers, **headers}) + + def with_cookies(self, cookies: dict[str, str]) -> "AuthenticatedClient": + """Get a new client matching this one with additional cookies""" + if self._client is not None: + self._client.cookies.update(cookies) + if self._async_client is not None: + self._async_client.cookies.update(cookies) + return evolve(self, cookies={**self._cookies, **cookies}) + + def with_timeout(self, timeout: httpx.Timeout) -> "AuthenticatedClient": + """Get a new client matching this one with a new timeout configuration""" + if self._client is not None: + self._client.timeout = timeout + if self._async_client is not None: + self._async_client.timeout = timeout + return evolve(self, timeout=timeout) + + def set_httpx_client(self, client: httpx.Client) -> "AuthenticatedClient": + """Manually set the underlying httpx.Client + + **NOTE**: This will override any other settings on the client, including cookies, headers, and timeout. + """ + self._client = client + return self + + def get_httpx_client(self) -> httpx.Client: + """Get the underlying httpx.Client, constructing a new one if not previously set""" + if self._client is None: + self._headers[self.auth_header_name] = f"{self.prefix} {self.token}" if self.prefix else self.token + self._client = httpx.Client( + base_url=self._base_url, + cookies=self._cookies, + headers=self._headers, + timeout=self._timeout, + verify=self._verify_ssl, + follow_redirects=self._follow_redirects, + **self._httpx_args, + ) + return self._client + + def __enter__(self) -> "AuthenticatedClient": + """Enter a context manager for self.client—you cannot enter twice (see httpx docs)""" + self.get_httpx_client().__enter__() + return self + + def __exit__(self, *args: Any, **kwargs: Any) -> None: + """Exit a context manager for internal httpx.Client (see httpx docs)""" + self.get_httpx_client().__exit__(*args, **kwargs) + + def set_async_httpx_client(self, async_client: httpx.AsyncClient) -> "AuthenticatedClient": + """Manually set the underlying httpx.AsyncClient + + **NOTE**: This will override any other settings on the client, including cookies, headers, and timeout. + """ + self._async_client = async_client + return self + + def get_async_httpx_client(self) -> httpx.AsyncClient: + """Get the underlying httpx.AsyncClient, constructing a new one if not previously set""" + if self._async_client is None: + self._headers[self.auth_header_name] = f"{self.prefix} {self.token}" if self.prefix else self.token + self._async_client = httpx.AsyncClient( + base_url=self._base_url, + cookies=self._cookies, + headers=self._headers, + timeout=self._timeout, + verify=self._verify_ssl, + follow_redirects=self._follow_redirects, + **self._httpx_args, + ) + return self._async_client + + async def __aenter__(self) -> "AuthenticatedClient": + """Enter a context manager for underlying httpx.AsyncClient—you cannot enter twice (see httpx docs)""" + await self.get_async_httpx_client().__aenter__() + return self + + async def __aexit__(self, *args: Any, **kwargs: Any) -> None: + """Exit a context manager for underlying httpx.AsyncClient (see httpx docs)""" + await self.get_async_httpx_client().__aexit__(*args, **kwargs) + diff --git a/kindred-sdk/personal_crm_client/errors.py b/kindred-sdk/personal_crm_client/errors.py new file mode 100644 index 00000000..b912123d --- /dev/null +++ b/kindred-sdk/personal_crm_client/errors.py @@ -0,0 +1,14 @@ +""" Contains shared errors types that can be raised from API functions """ + +class UnexpectedStatus(Exception): + """Raised by api functions when the response status an undocumented status and Client.raise_on_unexpected_status is True""" + + def __init__(self, status_code: int, content: bytes): + self.status_code = status_code + self.content = content + + super().__init__( + f"Unexpected status code: {status_code}\n\nResponse content:\n{content.decode(errors='ignore')}" + ) + +__all__ = ["UnexpectedStatus"] diff --git a/kindred-sdk/personal_crm_client/models/__init__.py b/kindred-sdk/personal_crm_client/models/__init__.py new file mode 100644 index 00000000..d8ad0e75 --- /dev/null +++ b/kindred-sdk/personal_crm_client/models/__init__.py @@ -0,0 +1,205 @@ +""" Contains all the data models used in inputs/outputs """ + +from .activity_log_public import ActivityLogPublic +from .activity_log_public_changes_json_type_0 import ActivityLogPublicChangesJsonType0 +from .activity_logs_public import ActivityLogsPublic +from .address_create import AddressCreate +from .address_public import AddressPublic +from .address_update import AddressUpdate +from .body_import_export_import_vcard import BodyImportExportImportVcard +from .body_login_login_access_token import BodyLoginLoginAccessToken +from .calendar_entry import CalendarEntry +from .calendar_month_response import CalendarMonthResponse +from .calendar_month_response_days import CalendarMonthResponseDays +from .contact_create import ContactCreate +from .contact_field_create import ContactFieldCreate +from .contact_field_public import ContactFieldPublic +from .contact_field_type import ContactFieldType +from .contact_field_update import ContactFieldUpdate +from .contact_public import ContactPublic +from .contact_update import ContactUpdate +from .contacts_public import ContactsPublic +from .custom_field_definition_create import CustomFieldDefinitionCreate +from .custom_field_definition_public import CustomFieldDefinitionPublic +from .custom_field_definition_update import CustomFieldDefinitionUpdate +from .custom_field_value_create import CustomFieldValueCreate +from .custom_field_value_public import CustomFieldValuePublic +from .custom_field_value_update import CustomFieldValueUpdate +from .debt_create import DebtCreate +from .debt_direction import DebtDirection +from .debt_public import DebtPublic +from .debt_update import DebtUpdate +from .debts_public import DebtsPublic +from .gift_create import GiftCreate +from .gift_public import GiftPublic +from .gift_status import GiftStatus +from .gift_update import GiftUpdate +from .gifts_public import GiftsPublic +from .group_create import GroupCreate +from .group_public import GroupPublic +from .group_update import GroupUpdate +from .groups_public import GroupsPublic +from .http_validation_error import HTTPValidationError +from .interaction_attendee_summary import InteractionAttendeeSummary +from .interaction_channel import InteractionChannel +from .interaction_create import InteractionCreate +from .interaction_public import InteractionPublic +from .interaction_update import InteractionUpdate +from .interactions_public import InteractionsPublic +from .journal_entries_public import JournalEntriesPublic +from .journal_entry_create import JournalEntryCreate +from .journal_entry_public import JournalEntryPublic +from .journal_entry_update import JournalEntryUpdate +from .life_event_create import LifeEventCreate +from .life_event_public import LifeEventPublic +from .life_event_update import LifeEventUpdate +from .life_events_public import LifeEventsPublic +from .media_category import MediaCategory +from .media_recommendation_create import MediaRecommendationCreate +from .media_recommendation_public import MediaRecommendationPublic +from .media_recommendation_update import MediaRecommendationUpdate +from .media_recommendations_public import MediaRecommendationsPublic +from .mention_source_contact import MentionSourceContact +from .message import Message +from .new_password import NewPassword +from .note_create import NoteCreate +from .note_mention_public import NoteMentionPublic +from .note_public import NotePublic +from .note_update import NoteUpdate +from .notes_public import NotesPublic +from .pet_create import PetCreate +from .pet_public import PetPublic +from .pet_update import PetUpdate +from .private_user_create import PrivateUserCreate +from .relationship_create import RelationshipCreate +from .relationship_public import RelationshipPublic +from .relationship_update import RelationshipUpdate +from .relationships_lookup_inverse_response_relationships_lookup_inverse import RelationshipsLookupInverseResponseRelationshipsLookupInverse +from .reminder_create import ReminderCreate +from .reminder_frequency import ReminderFrequency +from .reminder_public import ReminderPublic +from .reminder_update import ReminderUpdate +from .reminders_public import RemindersPublic +from .share_in import ShareIn +from .tag_create import TagCreate +from .tag_public import TagPublic +from .tag_share_public import TagSharePublic +from .tag_shares_delete_tag_share_response_tag_shares_delete_tag_share import TagSharesDeleteTagShareResponseTagSharesDeleteTagShare +from .tag_shares_public import TagSharesPublic +from .tag_update import TagUpdate +from .tags_public import TagsPublic +from .token import Token +from .update_password import UpdatePassword +from .user_create import UserCreate +from .user_public import UserPublic +from .user_register import UserRegister +from .user_update import UserUpdate +from .user_update_me import UserUpdateMe +from .users_public import UsersPublic +from .validation_error import ValidationError +from .validation_error_context import ValidationErrorContext +from .webhook_endpoint_base import WebhookEndpointBase +from .webhooks_inbound_webhook_payload import WebhooksInboundWebhookPayload + +__all__ = ( + "ActivityLogPublic", + "ActivityLogPublicChangesJsonType0", + "ActivityLogsPublic", + "AddressCreate", + "AddressPublic", + "AddressUpdate", + "BodyImportExportImportVcard", + "BodyLoginLoginAccessToken", + "CalendarEntry", + "CalendarMonthResponse", + "CalendarMonthResponseDays", + "ContactCreate", + "ContactFieldCreate", + "ContactFieldPublic", + "ContactFieldType", + "ContactFieldUpdate", + "ContactPublic", + "ContactsPublic", + "ContactUpdate", + "CustomFieldDefinitionCreate", + "CustomFieldDefinitionPublic", + "CustomFieldDefinitionUpdate", + "CustomFieldValueCreate", + "CustomFieldValuePublic", + "CustomFieldValueUpdate", + "DebtCreate", + "DebtDirection", + "DebtPublic", + "DebtsPublic", + "DebtUpdate", + "GiftCreate", + "GiftPublic", + "GiftsPublic", + "GiftStatus", + "GiftUpdate", + "GroupCreate", + "GroupPublic", + "GroupsPublic", + "GroupUpdate", + "HTTPValidationError", + "InteractionAttendeeSummary", + "InteractionChannel", + "InteractionCreate", + "InteractionPublic", + "InteractionsPublic", + "InteractionUpdate", + "JournalEntriesPublic", + "JournalEntryCreate", + "JournalEntryPublic", + "JournalEntryUpdate", + "LifeEventCreate", + "LifeEventPublic", + "LifeEventsPublic", + "LifeEventUpdate", + "MediaCategory", + "MediaRecommendationCreate", + "MediaRecommendationPublic", + "MediaRecommendationsPublic", + "MediaRecommendationUpdate", + "MentionSourceContact", + "Message", + "NewPassword", + "NoteCreate", + "NoteMentionPublic", + "NotePublic", + "NotesPublic", + "NoteUpdate", + "PetCreate", + "PetPublic", + "PetUpdate", + "PrivateUserCreate", + "RelationshipCreate", + "RelationshipPublic", + "RelationshipsLookupInverseResponseRelationshipsLookupInverse", + "RelationshipUpdate", + "ReminderCreate", + "ReminderFrequency", + "ReminderPublic", + "RemindersPublic", + "ReminderUpdate", + "ShareIn", + "TagCreate", + "TagPublic", + "TagSharePublic", + "TagSharesDeleteTagShareResponseTagSharesDeleteTagShare", + "TagSharesPublic", + "TagsPublic", + "TagUpdate", + "Token", + "UpdatePassword", + "UserCreate", + "UserPublic", + "UserRegister", + "UsersPublic", + "UserUpdate", + "UserUpdateMe", + "ValidationError", + "ValidationErrorContext", + "WebhookEndpointBase", + "WebhooksInboundWebhookPayload", +) diff --git a/kindred-sdk/personal_crm_client/models/activity_log_public.py b/kindred-sdk/personal_crm_client/models/activity_log_public.py new file mode 100644 index 00000000..529b9df2 --- /dev/null +++ b/kindred-sdk/personal_crm_client/models/activity_log_public.py @@ -0,0 +1,192 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +from dateutil.parser import isoparse +from typing import cast +from uuid import UUID +import datetime + +if TYPE_CHECKING: + from ..models.activity_log_public_changes_json_type_0 import ActivityLogPublicChangesJsonType0 + + + + + +T = TypeVar("T", bound="ActivityLogPublic") + + + +@_attrs_define +class ActivityLogPublic: + """ + Attributes: + id (UUID): + owner_id (UUID): + actor_id (None | UUID): + entity_type (str): + entity_id (UUID): + action (str): + changes_json (ActivityLogPublicChangesJsonType0 | None): + occurred_at (datetime.datetime): + """ + + id: UUID + owner_id: UUID + actor_id: None | UUID + entity_type: str + entity_id: UUID + action: str + changes_json: ActivityLogPublicChangesJsonType0 | None + occurred_at: datetime.datetime + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + from ..models.activity_log_public_changes_json_type_0 import ActivityLogPublicChangesJsonType0 + id = str(self.id) + + owner_id = str(self.owner_id) + + actor_id: None | str + if isinstance(self.actor_id, UUID): + actor_id = str(self.actor_id) + else: + actor_id = self.actor_id + + entity_type = self.entity_type + + entity_id = str(self.entity_id) + + action = self.action + + changes_json: dict[str, Any] | None + if isinstance(self.changes_json, ActivityLogPublicChangesJsonType0): + changes_json = self.changes_json.to_dict() + else: + changes_json = self.changes_json + + occurred_at = self.occurred_at.isoformat() + + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({ + "id": id, + "owner_id": owner_id, + "actor_id": actor_id, + "entity_type": entity_type, + "entity_id": entity_id, + "action": action, + "changes_json": changes_json, + "occurred_at": occurred_at, + }) + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + from ..models.activity_log_public_changes_json_type_0 import ActivityLogPublicChangesJsonType0 + d = dict(src_dict) + id = UUID(d.pop("id")) + + + + + owner_id = UUID(d.pop("owner_id")) + + + + + def _parse_actor_id(data: object) -> None | UUID: + if data is None: + return data + try: + if not isinstance(data, str): + raise TypeError() + actor_id_type_0 = UUID(data) + + + + return actor_id_type_0 + except (TypeError, ValueError, AttributeError, KeyError): + pass + return cast(None | UUID, data) + + actor_id = _parse_actor_id(d.pop("actor_id")) + + + entity_type = d.pop("entity_type") + + entity_id = UUID(d.pop("entity_id")) + + + + + action = d.pop("action") + + def _parse_changes_json(data: object) -> ActivityLogPublicChangesJsonType0 | None: + if data is None: + return data + try: + if not isinstance(data, dict): + raise TypeError() + changes_json_type_0 = ActivityLogPublicChangesJsonType0.from_dict(data) + + + + return changes_json_type_0 + except (TypeError, ValueError, AttributeError, KeyError): + pass + return cast(ActivityLogPublicChangesJsonType0 | None, data) + + changes_json = _parse_changes_json(d.pop("changes_json")) + + + occurred_at = isoparse(d.pop("occurred_at")) + + + + + activity_log_public = cls( + id=id, + owner_id=owner_id, + actor_id=actor_id, + entity_type=entity_type, + entity_id=entity_id, + action=action, + changes_json=changes_json, + occurred_at=occurred_at, + ) + + + activity_log_public.additional_properties = d + return activity_log_public + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/kindred-sdk/personal_crm_client/models/activity_log_public_changes_json_type_0.py b/kindred-sdk/personal_crm_client/models/activity_log_public_changes_json_type_0.py new file mode 100644 index 00000000..8ea368f8 --- /dev/null +++ b/kindred-sdk/personal_crm_client/models/activity_log_public_changes_json_type_0.py @@ -0,0 +1,65 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + + + + + + + +T = TypeVar("T", bound="ActivityLogPublicChangesJsonType0") + + + +@_attrs_define +class ActivityLogPublicChangesJsonType0: + """ + """ + + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + activity_log_public_changes_json_type_0 = cls( + ) + + + activity_log_public_changes_json_type_0.additional_properties = d + return activity_log_public_changes_json_type_0 + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/kindred-sdk/personal_crm_client/models/activity_logs_public.py b/kindred-sdk/personal_crm_client/models/activity_logs_public.py new file mode 100644 index 00000000..f233f508 --- /dev/null +++ b/kindred-sdk/personal_crm_client/models/activity_logs_public.py @@ -0,0 +1,102 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +from typing import cast + +if TYPE_CHECKING: + from ..models.activity_log_public import ActivityLogPublic + + + + + +T = TypeVar("T", bound="ActivityLogsPublic") + + + +@_attrs_define +class ActivityLogsPublic: + """ + Attributes: + data (list[ActivityLogPublic]): + count (int): + """ + + data: list[ActivityLogPublic] + count: int + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + from ..models.activity_log_public import ActivityLogPublic + data = [] + for data_item_data in self.data: + data_item = data_item_data.to_dict() + data.append(data_item) + + + + count = self.count + + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({ + "data": data, + "count": count, + }) + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + from ..models.activity_log_public import ActivityLogPublic + d = dict(src_dict) + data = [] + _data = d.pop("data") + for data_item_data in (_data): + data_item = ActivityLogPublic.from_dict(data_item_data) + + + + data.append(data_item) + + + count = d.pop("count") + + activity_logs_public = cls( + data=data, + count=count, + ) + + + activity_logs_public.additional_properties = d + return activity_logs_public + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/kindred-sdk/personal_crm_client/models/address_create.py b/kindred-sdk/personal_crm_client/models/address_create.py new file mode 100644 index 00000000..08741e90 --- /dev/null +++ b/kindred-sdk/personal_crm_client/models/address_create.py @@ -0,0 +1,259 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +from ..types import UNSET, Unset +from typing import cast +from uuid import UUID + + + + + + +T = TypeVar("T", bound="AddressCreate") + + + +@_attrs_define +class AddressCreate: + """ + Attributes: + contact_id (UUID): + label (str | Unset): Label like "home", "work", "other". Default: 'home'. + street (None | str | Unset): Street line 1. + extended (None | str | Unset): Apartment, suite, floor, etc. + city (None | str | Unset): City. + region (None | str | Unset): State, province, or region. + postal_code (None | str | Unset): ZIP or postal code. + country (None | str | Unset): Country. + latitude (float | None | Unset): Geocoded latitude; used for map visualization. + longitude (float | None | Unset): Geocoded longitude; used for map visualization. + """ + + contact_id: UUID + label: str | Unset = 'home' + street: None | str | Unset = UNSET + extended: None | str | Unset = UNSET + city: None | str | Unset = UNSET + region: None | str | Unset = UNSET + postal_code: None | str | Unset = UNSET + country: None | str | Unset = UNSET + latitude: float | None | Unset = UNSET + longitude: float | None | Unset = UNSET + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + contact_id = str(self.contact_id) + + label = self.label + + street: None | str | Unset + if isinstance(self.street, Unset): + street = UNSET + else: + street = self.street + + extended: None | str | Unset + if isinstance(self.extended, Unset): + extended = UNSET + else: + extended = self.extended + + city: None | str | Unset + if isinstance(self.city, Unset): + city = UNSET + else: + city = self.city + + region: None | str | Unset + if isinstance(self.region, Unset): + region = UNSET + else: + region = self.region + + postal_code: None | str | Unset + if isinstance(self.postal_code, Unset): + postal_code = UNSET + else: + postal_code = self.postal_code + + country: None | str | Unset + if isinstance(self.country, Unset): + country = UNSET + else: + country = self.country + + latitude: float | None | Unset + if isinstance(self.latitude, Unset): + latitude = UNSET + else: + latitude = self.latitude + + longitude: float | None | Unset + if isinstance(self.longitude, Unset): + longitude = UNSET + else: + longitude = self.longitude + + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({ + "contact_id": contact_id, + }) + if label is not UNSET: + field_dict["label"] = label + if street is not UNSET: + field_dict["street"] = street + if extended is not UNSET: + field_dict["extended"] = extended + if city is not UNSET: + field_dict["city"] = city + if region is not UNSET: + field_dict["region"] = region + if postal_code is not UNSET: + field_dict["postal_code"] = postal_code + if country is not UNSET: + field_dict["country"] = country + if latitude is not UNSET: + field_dict["latitude"] = latitude + if longitude is not UNSET: + field_dict["longitude"] = longitude + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + contact_id = UUID(d.pop("contact_id")) + + + + + label = d.pop("label", UNSET) + + def _parse_street(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + street = _parse_street(d.pop("street", UNSET)) + + + def _parse_extended(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + extended = _parse_extended(d.pop("extended", UNSET)) + + + def _parse_city(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + city = _parse_city(d.pop("city", UNSET)) + + + def _parse_region(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + region = _parse_region(d.pop("region", UNSET)) + + + def _parse_postal_code(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + postal_code = _parse_postal_code(d.pop("postal_code", UNSET)) + + + def _parse_country(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + country = _parse_country(d.pop("country", UNSET)) + + + def _parse_latitude(data: object) -> float | None | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(float | None | Unset, data) + + latitude = _parse_latitude(d.pop("latitude", UNSET)) + + + def _parse_longitude(data: object) -> float | None | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(float | None | Unset, data) + + longitude = _parse_longitude(d.pop("longitude", UNSET)) + + + address_create = cls( + contact_id=contact_id, + label=label, + street=street, + extended=extended, + city=city, + region=region, + postal_code=postal_code, + country=country, + latitude=latitude, + longitude=longitude, + ) + + + address_create.additional_properties = d + return address_create + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/kindred-sdk/personal_crm_client/models/address_public.py b/kindred-sdk/personal_crm_client/models/address_public.py new file mode 100644 index 00000000..6864690d --- /dev/null +++ b/kindred-sdk/personal_crm_client/models/address_public.py @@ -0,0 +1,270 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +from ..types import UNSET, Unset +from typing import cast +from uuid import UUID + + + + + + +T = TypeVar("T", bound="AddressPublic") + + + +@_attrs_define +class AddressPublic: + """ + Attributes: + id (UUID): + contact_id (UUID): + label (str | Unset): Label like "home", "work", "other". Default: 'home'. + street (None | str | Unset): Street line 1. + extended (None | str | Unset): Apartment, suite, floor, etc. + city (None | str | Unset): City. + region (None | str | Unset): State, province, or region. + postal_code (None | str | Unset): ZIP or postal code. + country (None | str | Unset): Country. + latitude (float | None | Unset): Geocoded latitude; used for map visualization. + longitude (float | None | Unset): Geocoded longitude; used for map visualization. + """ + + id: UUID + contact_id: UUID + label: str | Unset = 'home' + street: None | str | Unset = UNSET + extended: None | str | Unset = UNSET + city: None | str | Unset = UNSET + region: None | str | Unset = UNSET + postal_code: None | str | Unset = UNSET + country: None | str | Unset = UNSET + latitude: float | None | Unset = UNSET + longitude: float | None | Unset = UNSET + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + id = str(self.id) + + contact_id = str(self.contact_id) + + label = self.label + + street: None | str | Unset + if isinstance(self.street, Unset): + street = UNSET + else: + street = self.street + + extended: None | str | Unset + if isinstance(self.extended, Unset): + extended = UNSET + else: + extended = self.extended + + city: None | str | Unset + if isinstance(self.city, Unset): + city = UNSET + else: + city = self.city + + region: None | str | Unset + if isinstance(self.region, Unset): + region = UNSET + else: + region = self.region + + postal_code: None | str | Unset + if isinstance(self.postal_code, Unset): + postal_code = UNSET + else: + postal_code = self.postal_code + + country: None | str | Unset + if isinstance(self.country, Unset): + country = UNSET + else: + country = self.country + + latitude: float | None | Unset + if isinstance(self.latitude, Unset): + latitude = UNSET + else: + latitude = self.latitude + + longitude: float | None | Unset + if isinstance(self.longitude, Unset): + longitude = UNSET + else: + longitude = self.longitude + + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({ + "id": id, + "contact_id": contact_id, + }) + if label is not UNSET: + field_dict["label"] = label + if street is not UNSET: + field_dict["street"] = street + if extended is not UNSET: + field_dict["extended"] = extended + if city is not UNSET: + field_dict["city"] = city + if region is not UNSET: + field_dict["region"] = region + if postal_code is not UNSET: + field_dict["postal_code"] = postal_code + if country is not UNSET: + field_dict["country"] = country + if latitude is not UNSET: + field_dict["latitude"] = latitude + if longitude is not UNSET: + field_dict["longitude"] = longitude + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + id = UUID(d.pop("id")) + + + + + contact_id = UUID(d.pop("contact_id")) + + + + + label = d.pop("label", UNSET) + + def _parse_street(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + street = _parse_street(d.pop("street", UNSET)) + + + def _parse_extended(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + extended = _parse_extended(d.pop("extended", UNSET)) + + + def _parse_city(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + city = _parse_city(d.pop("city", UNSET)) + + + def _parse_region(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + region = _parse_region(d.pop("region", UNSET)) + + + def _parse_postal_code(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + postal_code = _parse_postal_code(d.pop("postal_code", UNSET)) + + + def _parse_country(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + country = _parse_country(d.pop("country", UNSET)) + + + def _parse_latitude(data: object) -> float | None | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(float | None | Unset, data) + + latitude = _parse_latitude(d.pop("latitude", UNSET)) + + + def _parse_longitude(data: object) -> float | None | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(float | None | Unset, data) + + longitude = _parse_longitude(d.pop("longitude", UNSET)) + + + address_public = cls( + id=id, + contact_id=contact_id, + label=label, + street=street, + extended=extended, + city=city, + region=region, + postal_code=postal_code, + country=country, + latitude=latitude, + longitude=longitude, + ) + + + address_public.additional_properties = d + return address_public + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/kindred-sdk/personal_crm_client/models/address_update.py b/kindred-sdk/personal_crm_client/models/address_update.py new file mode 100644 index 00000000..773ed13f --- /dev/null +++ b/kindred-sdk/personal_crm_client/models/address_update.py @@ -0,0 +1,259 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +from ..types import UNSET, Unset +from typing import cast + + + + + + +T = TypeVar("T", bound="AddressUpdate") + + + +@_attrs_define +class AddressUpdate: + """ + Attributes: + label (None | str | Unset): + street (None | str | Unset): + extended (None | str | Unset): + city (None | str | Unset): + region (None | str | Unset): + postal_code (None | str | Unset): + country (None | str | Unset): + latitude (float | None | Unset): + longitude (float | None | Unset): + """ + + label: None | str | Unset = UNSET + street: None | str | Unset = UNSET + extended: None | str | Unset = UNSET + city: None | str | Unset = UNSET + region: None | str | Unset = UNSET + postal_code: None | str | Unset = UNSET + country: None | str | Unset = UNSET + latitude: float | None | Unset = UNSET + longitude: float | None | Unset = UNSET + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + label: None | str | Unset + if isinstance(self.label, Unset): + label = UNSET + else: + label = self.label + + street: None | str | Unset + if isinstance(self.street, Unset): + street = UNSET + else: + street = self.street + + extended: None | str | Unset + if isinstance(self.extended, Unset): + extended = UNSET + else: + extended = self.extended + + city: None | str | Unset + if isinstance(self.city, Unset): + city = UNSET + else: + city = self.city + + region: None | str | Unset + if isinstance(self.region, Unset): + region = UNSET + else: + region = self.region + + postal_code: None | str | Unset + if isinstance(self.postal_code, Unset): + postal_code = UNSET + else: + postal_code = self.postal_code + + country: None | str | Unset + if isinstance(self.country, Unset): + country = UNSET + else: + country = self.country + + latitude: float | None | Unset + if isinstance(self.latitude, Unset): + latitude = UNSET + else: + latitude = self.latitude + + longitude: float | None | Unset + if isinstance(self.longitude, Unset): + longitude = UNSET + else: + longitude = self.longitude + + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({ + }) + if label is not UNSET: + field_dict["label"] = label + if street is not UNSET: + field_dict["street"] = street + if extended is not UNSET: + field_dict["extended"] = extended + if city is not UNSET: + field_dict["city"] = city + if region is not UNSET: + field_dict["region"] = region + if postal_code is not UNSET: + field_dict["postal_code"] = postal_code + if country is not UNSET: + field_dict["country"] = country + if latitude is not UNSET: + field_dict["latitude"] = latitude + if longitude is not UNSET: + field_dict["longitude"] = longitude + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + def _parse_label(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + label = _parse_label(d.pop("label", UNSET)) + + + def _parse_street(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + street = _parse_street(d.pop("street", UNSET)) + + + def _parse_extended(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + extended = _parse_extended(d.pop("extended", UNSET)) + + + def _parse_city(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + city = _parse_city(d.pop("city", UNSET)) + + + def _parse_region(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + region = _parse_region(d.pop("region", UNSET)) + + + def _parse_postal_code(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + postal_code = _parse_postal_code(d.pop("postal_code", UNSET)) + + + def _parse_country(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + country = _parse_country(d.pop("country", UNSET)) + + + def _parse_latitude(data: object) -> float | None | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(float | None | Unset, data) + + latitude = _parse_latitude(d.pop("latitude", UNSET)) + + + def _parse_longitude(data: object) -> float | None | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(float | None | Unset, data) + + longitude = _parse_longitude(d.pop("longitude", UNSET)) + + + address_update = cls( + label=label, + street=street, + extended=extended, + city=city, + region=region, + postal_code=postal_code, + country=country, + latitude=latitude, + longitude=longitude, + ) + + + address_update.additional_properties = d + return address_update + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/kindred-sdk/personal_crm_client/models/body_import_export_import_vcard.py b/kindred-sdk/personal_crm_client/models/body_import_export_import_vcard.py new file mode 100644 index 00000000..8dd39e67 --- /dev/null +++ b/kindred-sdk/personal_crm_client/models/body_import_export_import_vcard.py @@ -0,0 +1,101 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field +import json +from .. import types + +from ..types import UNSET, Unset + +from ..types import File, FileTypes +from io import BytesIO + + + + + + +T = TypeVar("T", bound="BodyImportExportImportVcard") + + + +@_attrs_define +class BodyImportExportImportVcard: + """ + Attributes: + file (File): + """ + + file: File + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + file = self.file.to_tuple() + + + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({ + "file": file, + }) + + return field_dict + + + def to_multipart(self) -> types.RequestFiles: + files: types.RequestFiles = [] + + files.append(("file", self.file.to_tuple())) + + + + + for prop_name, prop in self.additional_properties.items(): + files.append((prop_name, (None, str(prop).encode(), "text/plain"))) + + + + return files + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + file = File( + payload = BytesIO(d.pop("file")) + ) + + + + + body_import_export_import_vcard = cls( + file=file, + ) + + + body_import_export_import_vcard.additional_properties = d + return body_import_export_import_vcard + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/kindred-sdk/personal_crm_client/models/body_login_login_access_token.py b/kindred-sdk/personal_crm_client/models/body_login_login_access_token.py new file mode 100644 index 00000000..675fb6a0 --- /dev/null +++ b/kindred-sdk/personal_crm_client/models/body_login_login_access_token.py @@ -0,0 +1,158 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +from ..types import UNSET, Unset +from typing import cast + + + + + + +T = TypeVar("T", bound="BodyLoginLoginAccessToken") + + + +@_attrs_define +class BodyLoginLoginAccessToken: + """ + Attributes: + username (str): + password (str): + grant_type (None | str | Unset): + scope (str | Unset): Default: ''. + client_id (None | str | Unset): + client_secret (None | str | Unset): + """ + + username: str + password: str + grant_type: None | str | Unset = UNSET + scope: str | Unset = '' + client_id: None | str | Unset = UNSET + client_secret: None | str | Unset = UNSET + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + username = self.username + + password = self.password + + grant_type: None | str | Unset + if isinstance(self.grant_type, Unset): + grant_type = UNSET + else: + grant_type = self.grant_type + + scope = self.scope + + client_id: None | str | Unset + if isinstance(self.client_id, Unset): + client_id = UNSET + else: + client_id = self.client_id + + client_secret: None | str | Unset + if isinstance(self.client_secret, Unset): + client_secret = UNSET + else: + client_secret = self.client_secret + + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({ + "username": username, + "password": password, + }) + if grant_type is not UNSET: + field_dict["grant_type"] = grant_type + if scope is not UNSET: + field_dict["scope"] = scope + if client_id is not UNSET: + field_dict["client_id"] = client_id + if client_secret is not UNSET: + field_dict["client_secret"] = client_secret + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + username = d.pop("username") + + password = d.pop("password") + + def _parse_grant_type(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + grant_type = _parse_grant_type(d.pop("grant_type", UNSET)) + + + scope = d.pop("scope", UNSET) + + def _parse_client_id(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + client_id = _parse_client_id(d.pop("client_id", UNSET)) + + + def _parse_client_secret(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + client_secret = _parse_client_secret(d.pop("client_secret", UNSET)) + + + body_login_login_access_token = cls( + username=username, + password=password, + grant_type=grant_type, + scope=scope, + client_id=client_id, + client_secret=client_secret, + ) + + + body_login_login_access_token.additional_properties = d + return body_login_login_access_token + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/kindred-sdk/personal_crm_client/models/calendar_entry.py b/kindred-sdk/personal_crm_client/models/calendar_entry.py new file mode 100644 index 00000000..789e7ac4 --- /dev/null +++ b/kindred-sdk/personal_crm_client/models/calendar_entry.py @@ -0,0 +1,112 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +from typing import cast +from uuid import UUID + + + + + + +T = TypeVar("T", bound="CalendarEntry") + + + +@_attrs_define +class CalendarEntry: + """ + Attributes: + contact_id (UUID): + name (str): + type_ (str): + age (int | None): + """ + + contact_id: UUID + name: str + type_: str + age: int | None + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + contact_id = str(self.contact_id) + + name = self.name + + type_ = self.type_ + + age: int | None + age = self.age + + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({ + "contact_id": contact_id, + "name": name, + "type": type_, + "age": age, + }) + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + contact_id = UUID(d.pop("contact_id")) + + + + + name = d.pop("name") + + type_ = d.pop("type") + + def _parse_age(data: object) -> int | None: + if data is None: + return data + return cast(int | None, data) + + age = _parse_age(d.pop("age")) + + + calendar_entry = cls( + contact_id=contact_id, + name=name, + type_=type_, + age=age, + ) + + + calendar_entry.additional_properties = d + return calendar_entry + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/kindred-sdk/personal_crm_client/models/calendar_month_response.py b/kindred-sdk/personal_crm_client/models/calendar_month_response.py new file mode 100644 index 00000000..2b2ad6a7 --- /dev/null +++ b/kindred-sdk/personal_crm_client/models/calendar_month_response.py @@ -0,0 +1,92 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +from typing import cast + +if TYPE_CHECKING: + from ..models.calendar_month_response_days import CalendarMonthResponseDays + + + + + +T = TypeVar("T", bound="CalendarMonthResponse") + + + +@_attrs_define +class CalendarMonthResponse: + """ + Attributes: + month (str): + days (CalendarMonthResponseDays): + """ + + month: str + days: CalendarMonthResponseDays + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + from ..models.calendar_month_response_days import CalendarMonthResponseDays + month = self.month + + days = self.days.to_dict() + + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({ + "month": month, + "days": days, + }) + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + from ..models.calendar_month_response_days import CalendarMonthResponseDays + d = dict(src_dict) + month = d.pop("month") + + days = CalendarMonthResponseDays.from_dict(d.pop("days")) + + + + + calendar_month_response = cls( + month=month, + days=days, + ) + + + calendar_month_response.additional_properties = d + return calendar_month_response + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/kindred-sdk/personal_crm_client/models/calendar_month_response_days.py b/kindred-sdk/personal_crm_client/models/calendar_month_response_days.py new file mode 100644 index 00000000..fa7b6aa9 --- /dev/null +++ b/kindred-sdk/personal_crm_client/models/calendar_month_response_days.py @@ -0,0 +1,90 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +from typing import cast + +if TYPE_CHECKING: + from ..models.calendar_entry import CalendarEntry + + + + + +T = TypeVar("T", bound="CalendarMonthResponseDays") + + + +@_attrs_define +class CalendarMonthResponseDays: + """ + """ + + additional_properties: dict[str, list[CalendarEntry]] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + from ..models.calendar_entry import CalendarEntry + + field_dict: dict[str, Any] = {} + for prop_name, prop in self.additional_properties.items(): + field_dict[prop_name] = [] + for additional_property_item_data in prop: + additional_property_item = additional_property_item_data.to_dict() + field_dict[prop_name].append(additional_property_item) + + + + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + from ..models.calendar_entry import CalendarEntry + d = dict(src_dict) + calendar_month_response_days = cls( + ) + + + additional_properties = {} + for prop_name, prop_dict in d.items(): + additional_property = [] + _additional_property = prop_dict + for additional_property_item_data in (_additional_property): + additional_property_item = CalendarEntry.from_dict(additional_property_item_data) + + + + additional_property.append(additional_property_item) + + additional_properties[prop_name] = additional_property + + calendar_month_response_days.additional_properties = additional_properties + return calendar_month_response_days + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> list[CalendarEntry]: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: list[CalendarEntry]) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/kindred-sdk/personal_crm_client/models/contact_create.py b/kindred-sdk/personal_crm_client/models/contact_create.py new file mode 100644 index 00000000..143aa8d3 --- /dev/null +++ b/kindred-sdk/personal_crm_client/models/contact_create.py @@ -0,0 +1,491 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +from ..types import UNSET, Unset +from dateutil.parser import isoparse +from typing import cast +from uuid import UUID +import datetime + + + + + + +T = TypeVar("T", bound="ContactCreate") + + + +@_attrs_define +class ContactCreate: + """ + Attributes: + first_name (str): Given name; required. + last_name (None | str | Unset): Family name. + middle_name (None | str | Unset): Middle name or initial. + prefix (None | str | Unset): Honorific like Dr., Mr., Ms. + suffix (None | str | Unset): Suffix like Jr., PhD. + nickname (None | str | Unset): Preferred or informal name. + company (None | str | Unset): Organization name. + department (None | str | Unset): Department within the company. + title (None | str | Unset): Job title. + birthday (datetime.date | None | Unset): Date of birth; used for milestone and birthday reminders. + how_we_met (None | str | Unset): Short story of how the introduction happened. + is_favorite (bool | Unset): Pinned to the top of contact lists. Default: False. + is_archived (bool | Unset): Soft-deleted; excluded from default lists. Default: False. + is_deceased (bool | Unset): Marks the contact as deceased. Default: False. + deceased_at (datetime.date | None | Unset): Date the contact passed away. + contact_frequency_days (int | None | Unset): Target days between interactions; drives losing-touch cadence. + stage (None | str | Unset): Kanban stage like Active, Dormant, Lost. + tag_ids (list[UUID] | None | Unset): + group_ids (list[UUID] | None | Unset): + """ + + first_name: str + last_name: None | str | Unset = UNSET + middle_name: None | str | Unset = UNSET + prefix: None | str | Unset = UNSET + suffix: None | str | Unset = UNSET + nickname: None | str | Unset = UNSET + company: None | str | Unset = UNSET + department: None | str | Unset = UNSET + title: None | str | Unset = UNSET + birthday: datetime.date | None | Unset = UNSET + how_we_met: None | str | Unset = UNSET + is_favorite: bool | Unset = False + is_archived: bool | Unset = False + is_deceased: bool | Unset = False + deceased_at: datetime.date | None | Unset = UNSET + contact_frequency_days: int | None | Unset = UNSET + stage: None | str | Unset = UNSET + tag_ids: list[UUID] | None | Unset = UNSET + group_ids: list[UUID] | None | Unset = UNSET + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + first_name = self.first_name + + last_name: None | str | Unset + if isinstance(self.last_name, Unset): + last_name = UNSET + else: + last_name = self.last_name + + middle_name: None | str | Unset + if isinstance(self.middle_name, Unset): + middle_name = UNSET + else: + middle_name = self.middle_name + + prefix: None | str | Unset + if isinstance(self.prefix, Unset): + prefix = UNSET + else: + prefix = self.prefix + + suffix: None | str | Unset + if isinstance(self.suffix, Unset): + suffix = UNSET + else: + suffix = self.suffix + + nickname: None | str | Unset + if isinstance(self.nickname, Unset): + nickname = UNSET + else: + nickname = self.nickname + + company: None | str | Unset + if isinstance(self.company, Unset): + company = UNSET + else: + company = self.company + + department: None | str | Unset + if isinstance(self.department, Unset): + department = UNSET + else: + department = self.department + + title: None | str | Unset + if isinstance(self.title, Unset): + title = UNSET + else: + title = self.title + + birthday: None | str | Unset + if isinstance(self.birthday, Unset): + birthday = UNSET + elif isinstance(self.birthday, datetime.date): + birthday = self.birthday.isoformat() + else: + birthday = self.birthday + + how_we_met: None | str | Unset + if isinstance(self.how_we_met, Unset): + how_we_met = UNSET + else: + how_we_met = self.how_we_met + + is_favorite = self.is_favorite + + is_archived = self.is_archived + + is_deceased = self.is_deceased + + deceased_at: None | str | Unset + if isinstance(self.deceased_at, Unset): + deceased_at = UNSET + elif isinstance(self.deceased_at, datetime.date): + deceased_at = self.deceased_at.isoformat() + else: + deceased_at = self.deceased_at + + contact_frequency_days: int | None | Unset + if isinstance(self.contact_frequency_days, Unset): + contact_frequency_days = UNSET + else: + contact_frequency_days = self.contact_frequency_days + + stage: None | str | Unset + if isinstance(self.stage, Unset): + stage = UNSET + else: + stage = self.stage + + tag_ids: list[str] | None | Unset + if isinstance(self.tag_ids, Unset): + tag_ids = UNSET + elif isinstance(self.tag_ids, list): + tag_ids = [] + for tag_ids_type_0_item_data in self.tag_ids: + tag_ids_type_0_item = str(tag_ids_type_0_item_data) + tag_ids.append(tag_ids_type_0_item) + + + else: + tag_ids = self.tag_ids + + group_ids: list[str] | None | Unset + if isinstance(self.group_ids, Unset): + group_ids = UNSET + elif isinstance(self.group_ids, list): + group_ids = [] + for group_ids_type_0_item_data in self.group_ids: + group_ids_type_0_item = str(group_ids_type_0_item_data) + group_ids.append(group_ids_type_0_item) + + + else: + group_ids = self.group_ids + + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({ + "first_name": first_name, + }) + if last_name is not UNSET: + field_dict["last_name"] = last_name + if middle_name is not UNSET: + field_dict["middle_name"] = middle_name + if prefix is not UNSET: + field_dict["prefix"] = prefix + if suffix is not UNSET: + field_dict["suffix"] = suffix + if nickname is not UNSET: + field_dict["nickname"] = nickname + if company is not UNSET: + field_dict["company"] = company + if department is not UNSET: + field_dict["department"] = department + if title is not UNSET: + field_dict["title"] = title + if birthday is not UNSET: + field_dict["birthday"] = birthday + if how_we_met is not UNSET: + field_dict["how_we_met"] = how_we_met + if is_favorite is not UNSET: + field_dict["is_favorite"] = is_favorite + if is_archived is not UNSET: + field_dict["is_archived"] = is_archived + if is_deceased is not UNSET: + field_dict["is_deceased"] = is_deceased + if deceased_at is not UNSET: + field_dict["deceased_at"] = deceased_at + if contact_frequency_days is not UNSET: + field_dict["contact_frequency_days"] = contact_frequency_days + if stage is not UNSET: + field_dict["stage"] = stage + if tag_ids is not UNSET: + field_dict["tag_ids"] = tag_ids + if group_ids is not UNSET: + field_dict["group_ids"] = group_ids + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + first_name = d.pop("first_name") + + def _parse_last_name(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + last_name = _parse_last_name(d.pop("last_name", UNSET)) + + + def _parse_middle_name(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + middle_name = _parse_middle_name(d.pop("middle_name", UNSET)) + + + def _parse_prefix(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + prefix = _parse_prefix(d.pop("prefix", UNSET)) + + + def _parse_suffix(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + suffix = _parse_suffix(d.pop("suffix", UNSET)) + + + def _parse_nickname(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + nickname = _parse_nickname(d.pop("nickname", UNSET)) + + + def _parse_company(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + company = _parse_company(d.pop("company", UNSET)) + + + def _parse_department(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + department = _parse_department(d.pop("department", UNSET)) + + + def _parse_title(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + title = _parse_title(d.pop("title", UNSET)) + + + def _parse_birthday(data: object) -> datetime.date | None | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + try: + if not isinstance(data, str): + raise TypeError() + birthday_type_0 = isoparse(data).date() + + + + return birthday_type_0 + except (TypeError, ValueError, AttributeError, KeyError): + pass + return cast(datetime.date | None | Unset, data) + + birthday = _parse_birthday(d.pop("birthday", UNSET)) + + + def _parse_how_we_met(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + how_we_met = _parse_how_we_met(d.pop("how_we_met", UNSET)) + + + is_favorite = d.pop("is_favorite", UNSET) + + is_archived = d.pop("is_archived", UNSET) + + is_deceased = d.pop("is_deceased", UNSET) + + def _parse_deceased_at(data: object) -> datetime.date | None | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + try: + if not isinstance(data, str): + raise TypeError() + deceased_at_type_0 = isoparse(data).date() + + + + return deceased_at_type_0 + except (TypeError, ValueError, AttributeError, KeyError): + pass + return cast(datetime.date | None | Unset, data) + + deceased_at = _parse_deceased_at(d.pop("deceased_at", UNSET)) + + + def _parse_contact_frequency_days(data: object) -> int | None | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(int | None | Unset, data) + + contact_frequency_days = _parse_contact_frequency_days(d.pop("contact_frequency_days", UNSET)) + + + def _parse_stage(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + stage = _parse_stage(d.pop("stage", UNSET)) + + + def _parse_tag_ids(data: object) -> list[UUID] | None | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + try: + if not isinstance(data, list): + raise TypeError() + tag_ids_type_0 = [] + _tag_ids_type_0 = data + for tag_ids_type_0_item_data in (_tag_ids_type_0): + tag_ids_type_0_item = UUID(tag_ids_type_0_item_data) + + + + tag_ids_type_0.append(tag_ids_type_0_item) + + return tag_ids_type_0 + except (TypeError, ValueError, AttributeError, KeyError): + pass + return cast(list[UUID] | None | Unset, data) + + tag_ids = _parse_tag_ids(d.pop("tag_ids", UNSET)) + + + def _parse_group_ids(data: object) -> list[UUID] | None | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + try: + if not isinstance(data, list): + raise TypeError() + group_ids_type_0 = [] + _group_ids_type_0 = data + for group_ids_type_0_item_data in (_group_ids_type_0): + group_ids_type_0_item = UUID(group_ids_type_0_item_data) + + + + group_ids_type_0.append(group_ids_type_0_item) + + return group_ids_type_0 + except (TypeError, ValueError, AttributeError, KeyError): + pass + return cast(list[UUID] | None | Unset, data) + + group_ids = _parse_group_ids(d.pop("group_ids", UNSET)) + + + contact_create = cls( + first_name=first_name, + last_name=last_name, + middle_name=middle_name, + prefix=prefix, + suffix=suffix, + nickname=nickname, + company=company, + department=department, + title=title, + birthday=birthday, + how_we_met=how_we_met, + is_favorite=is_favorite, + is_archived=is_archived, + is_deceased=is_deceased, + deceased_at=deceased_at, + contact_frequency_days=contact_frequency_days, + stage=stage, + tag_ids=tag_ids, + group_ids=group_ids, + ) + + + contact_create.additional_properties = d + return contact_create + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/kindred-sdk/personal_crm_client/models/contact_field_create.py b/kindred-sdk/personal_crm_client/models/contact_field_create.py new file mode 100644 index 00000000..ce0139a4 --- /dev/null +++ b/kindred-sdk/personal_crm_client/models/contact_field_create.py @@ -0,0 +1,127 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +from ..models.contact_field_type import ContactFieldType +from ..types import UNSET, Unset +from uuid import UUID + + + + + + +T = TypeVar("T", bound="ContactFieldCreate") + + + +@_attrs_define +class ContactFieldCreate: + """ + Attributes: + field_type (ContactFieldType): + label (str): Label like "home", "work", "cell", "twitter". + value (str): The actual email address, phone number, etc. + contact_id (UUID): + is_primary (bool | Unset): Marks the primary entry for this field_type on the contact. Default: False. + sort_order (int | Unset): Display order within the same field_type. Default: 0. + """ + + field_type: ContactFieldType + label: str + value: str + contact_id: UUID + is_primary: bool | Unset = False + sort_order: int | Unset = 0 + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + field_type = self.field_type.value + + label = self.label + + value = self.value + + contact_id = str(self.contact_id) + + is_primary = self.is_primary + + sort_order = self.sort_order + + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({ + "field_type": field_type, + "label": label, + "value": value, + "contact_id": contact_id, + }) + if is_primary is not UNSET: + field_dict["is_primary"] = is_primary + if sort_order is not UNSET: + field_dict["sort_order"] = sort_order + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + field_type = ContactFieldType(d.pop("field_type")) + + + + + label = d.pop("label") + + value = d.pop("value") + + contact_id = UUID(d.pop("contact_id")) + + + + + is_primary = d.pop("is_primary", UNSET) + + sort_order = d.pop("sort_order", UNSET) + + contact_field_create = cls( + field_type=field_type, + label=label, + value=value, + contact_id=contact_id, + is_primary=is_primary, + sort_order=sort_order, + ) + + + contact_field_create.additional_properties = d + return contact_field_create + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/kindred-sdk/personal_crm_client/models/contact_field_public.py b/kindred-sdk/personal_crm_client/models/contact_field_public.py new file mode 100644 index 00000000..64e23d15 --- /dev/null +++ b/kindred-sdk/personal_crm_client/models/contact_field_public.py @@ -0,0 +1,138 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +from ..models.contact_field_type import ContactFieldType +from ..types import UNSET, Unset +from uuid import UUID + + + + + + +T = TypeVar("T", bound="ContactFieldPublic") + + + +@_attrs_define +class ContactFieldPublic: + """ + Attributes: + field_type (ContactFieldType): + label (str): Label like "home", "work", "cell", "twitter". + value (str): The actual email address, phone number, etc. + id (UUID): + contact_id (UUID): + is_primary (bool | Unset): Marks the primary entry for this field_type on the contact. Default: False. + sort_order (int | Unset): Display order within the same field_type. Default: 0. + """ + + field_type: ContactFieldType + label: str + value: str + id: UUID + contact_id: UUID + is_primary: bool | Unset = False + sort_order: int | Unset = 0 + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + field_type = self.field_type.value + + label = self.label + + value = self.value + + id = str(self.id) + + contact_id = str(self.contact_id) + + is_primary = self.is_primary + + sort_order = self.sort_order + + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({ + "field_type": field_type, + "label": label, + "value": value, + "id": id, + "contact_id": contact_id, + }) + if is_primary is not UNSET: + field_dict["is_primary"] = is_primary + if sort_order is not UNSET: + field_dict["sort_order"] = sort_order + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + field_type = ContactFieldType(d.pop("field_type")) + + + + + label = d.pop("label") + + value = d.pop("value") + + id = UUID(d.pop("id")) + + + + + contact_id = UUID(d.pop("contact_id")) + + + + + is_primary = d.pop("is_primary", UNSET) + + sort_order = d.pop("sort_order", UNSET) + + contact_field_public = cls( + field_type=field_type, + label=label, + value=value, + id=id, + contact_id=contact_id, + is_primary=is_primary, + sort_order=sort_order, + ) + + + contact_field_public.additional_properties = d + return contact_field_public + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/kindred-sdk/personal_crm_client/models/contact_field_type.py b/kindred-sdk/personal_crm_client/models/contact_field_type.py new file mode 100644 index 00000000..feac025c --- /dev/null +++ b/kindred-sdk/personal_crm_client/models/contact_field_type.py @@ -0,0 +1,8 @@ +from enum import Enum + +class ContactFieldType(str, Enum): + EMAIL = "email" + PHONE = "phone" + + def __str__(self) -> str: + return str(self.value) diff --git a/kindred-sdk/personal_crm_client/models/contact_field_update.py b/kindred-sdk/personal_crm_client/models/contact_field_update.py new file mode 100644 index 00000000..36676708 --- /dev/null +++ b/kindred-sdk/personal_crm_client/models/contact_field_update.py @@ -0,0 +1,188 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +from ..models.contact_field_type import ContactFieldType +from ..types import UNSET, Unset +from typing import cast + + + + + + +T = TypeVar("T", bound="ContactFieldUpdate") + + + +@_attrs_define +class ContactFieldUpdate: + """ + Attributes: + field_type (ContactFieldType | None | Unset): + label (None | str | Unset): + value (None | str | Unset): + is_primary (bool | None | Unset): + sort_order (int | None | Unset): + """ + + field_type: ContactFieldType | None | Unset = UNSET + label: None | str | Unset = UNSET + value: None | str | Unset = UNSET + is_primary: bool | None | Unset = UNSET + sort_order: int | None | Unset = UNSET + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + field_type: None | str | Unset + if isinstance(self.field_type, Unset): + field_type = UNSET + elif isinstance(self.field_type, ContactFieldType): + field_type = self.field_type.value + else: + field_type = self.field_type + + label: None | str | Unset + if isinstance(self.label, Unset): + label = UNSET + else: + label = self.label + + value: None | str | Unset + if isinstance(self.value, Unset): + value = UNSET + else: + value = self.value + + is_primary: bool | None | Unset + if isinstance(self.is_primary, Unset): + is_primary = UNSET + else: + is_primary = self.is_primary + + sort_order: int | None | Unset + if isinstance(self.sort_order, Unset): + sort_order = UNSET + else: + sort_order = self.sort_order + + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({ + }) + if field_type is not UNSET: + field_dict["field_type"] = field_type + if label is not UNSET: + field_dict["label"] = label + if value is not UNSET: + field_dict["value"] = value + if is_primary is not UNSET: + field_dict["is_primary"] = is_primary + if sort_order is not UNSET: + field_dict["sort_order"] = sort_order + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + def _parse_field_type(data: object) -> ContactFieldType | None | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + try: + if not isinstance(data, str): + raise TypeError() + field_type_type_0 = ContactFieldType(data) + + + + return field_type_type_0 + except (TypeError, ValueError, AttributeError, KeyError): + pass + return cast(ContactFieldType | None | Unset, data) + + field_type = _parse_field_type(d.pop("field_type", UNSET)) + + + def _parse_label(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + label = _parse_label(d.pop("label", UNSET)) + + + def _parse_value(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + value = _parse_value(d.pop("value", UNSET)) + + + def _parse_is_primary(data: object) -> bool | None | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(bool | None | Unset, data) + + is_primary = _parse_is_primary(d.pop("is_primary", UNSET)) + + + def _parse_sort_order(data: object) -> int | None | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(int | None | Unset, data) + + sort_order = _parse_sort_order(d.pop("sort_order", UNSET)) + + + contact_field_update = cls( + field_type=field_type, + label=label, + value=value, + is_primary=is_primary, + sort_order=sort_order, + ) + + + contact_field_update.additional_properties = d + return contact_field_update + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/kindred-sdk/personal_crm_client/models/contact_public.py b/kindred-sdk/personal_crm_client/models/contact_public.py new file mode 100644 index 00000000..12dc968a --- /dev/null +++ b/kindred-sdk/personal_crm_client/models/contact_public.py @@ -0,0 +1,573 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +from ..types import UNSET, Unset +from dateutil.parser import isoparse +from typing import cast +from uuid import UUID +import datetime + +if TYPE_CHECKING: + from ..models.group_public import GroupPublic + from ..models.tag_public import TagPublic + + + + + +T = TypeVar("T", bound="ContactPublic") + + + +@_attrs_define +class ContactPublic: + """ + Attributes: + first_name (str): Given name; required. + id (UUID): + avatar_url (None | str): + last_contacted_at (datetime.datetime | None): + created_at (datetime.datetime): + updated_at (datetime.datetime): + last_name (None | str | Unset): Family name. + middle_name (None | str | Unset): Middle name or initial. + prefix (None | str | Unset): Honorific like Dr., Mr., Ms. + suffix (None | str | Unset): Suffix like Jr., PhD. + nickname (None | str | Unset): Preferred or informal name. + company (None | str | Unset): Organization name. + department (None | str | Unset): Department within the company. + title (None | str | Unset): Job title. + birthday (datetime.date | None | Unset): Date of birth; used for milestone and birthday reminders. + how_we_met (None | str | Unset): Short story of how the introduction happened. + is_favorite (bool | Unset): Pinned to the top of contact lists. Default: False. + is_archived (bool | Unset): Soft-deleted; excluded from default lists. Default: False. + is_deceased (bool | Unset): Marks the contact as deceased. Default: False. + deceased_at (datetime.date | None | Unset): Date the contact passed away. + contact_frequency_days (int | None | Unset): Target days between interactions; drives losing-touch cadence. + stage (None | str | Unset): Kanban stage like Active, Dormant, Lost. + deleted_at (datetime.datetime | None | Unset): + tags (list[TagPublic] | Unset): + groups (list[GroupPublic] | Unset): + """ + + first_name: str + id: UUID + avatar_url: None | str + last_contacted_at: datetime.datetime | None + created_at: datetime.datetime + updated_at: datetime.datetime + last_name: None | str | Unset = UNSET + middle_name: None | str | Unset = UNSET + prefix: None | str | Unset = UNSET + suffix: None | str | Unset = UNSET + nickname: None | str | Unset = UNSET + company: None | str | Unset = UNSET + department: None | str | Unset = UNSET + title: None | str | Unset = UNSET + birthday: datetime.date | None | Unset = UNSET + how_we_met: None | str | Unset = UNSET + is_favorite: bool | Unset = False + is_archived: bool | Unset = False + is_deceased: bool | Unset = False + deceased_at: datetime.date | None | Unset = UNSET + contact_frequency_days: int | None | Unset = UNSET + stage: None | str | Unset = UNSET + deleted_at: datetime.datetime | None | Unset = UNSET + tags: list[TagPublic] | Unset = UNSET + groups: list[GroupPublic] | Unset = UNSET + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + from ..models.group_public import GroupPublic + from ..models.tag_public import TagPublic + first_name = self.first_name + + id = str(self.id) + + avatar_url: None | str + avatar_url = self.avatar_url + + last_contacted_at: None | str + if isinstance(self.last_contacted_at, datetime.datetime): + last_contacted_at = self.last_contacted_at.isoformat() + else: + last_contacted_at = self.last_contacted_at + + created_at = self.created_at.isoformat() + + updated_at = self.updated_at.isoformat() + + last_name: None | str | Unset + if isinstance(self.last_name, Unset): + last_name = UNSET + else: + last_name = self.last_name + + middle_name: None | str | Unset + if isinstance(self.middle_name, Unset): + middle_name = UNSET + else: + middle_name = self.middle_name + + prefix: None | str | Unset + if isinstance(self.prefix, Unset): + prefix = UNSET + else: + prefix = self.prefix + + suffix: None | str | Unset + if isinstance(self.suffix, Unset): + suffix = UNSET + else: + suffix = self.suffix + + nickname: None | str | Unset + if isinstance(self.nickname, Unset): + nickname = UNSET + else: + nickname = self.nickname + + company: None | str | Unset + if isinstance(self.company, Unset): + company = UNSET + else: + company = self.company + + department: None | str | Unset + if isinstance(self.department, Unset): + department = UNSET + else: + department = self.department + + title: None | str | Unset + if isinstance(self.title, Unset): + title = UNSET + else: + title = self.title + + birthday: None | str | Unset + if isinstance(self.birthday, Unset): + birthday = UNSET + elif isinstance(self.birthday, datetime.date): + birthday = self.birthday.isoformat() + else: + birthday = self.birthday + + how_we_met: None | str | Unset + if isinstance(self.how_we_met, Unset): + how_we_met = UNSET + else: + how_we_met = self.how_we_met + + is_favorite = self.is_favorite + + is_archived = self.is_archived + + is_deceased = self.is_deceased + + deceased_at: None | str | Unset + if isinstance(self.deceased_at, Unset): + deceased_at = UNSET + elif isinstance(self.deceased_at, datetime.date): + deceased_at = self.deceased_at.isoformat() + else: + deceased_at = self.deceased_at + + contact_frequency_days: int | None | Unset + if isinstance(self.contact_frequency_days, Unset): + contact_frequency_days = UNSET + else: + contact_frequency_days = self.contact_frequency_days + + stage: None | str | Unset + if isinstance(self.stage, Unset): + stage = UNSET + else: + stage = self.stage + + deleted_at: None | str | Unset + if isinstance(self.deleted_at, Unset): + deleted_at = UNSET + elif isinstance(self.deleted_at, datetime.datetime): + deleted_at = self.deleted_at.isoformat() + else: + deleted_at = self.deleted_at + + tags: list[dict[str, Any]] | Unset = UNSET + if not isinstance(self.tags, Unset): + tags = [] + for tags_item_data in self.tags: + tags_item = tags_item_data.to_dict() + tags.append(tags_item) + + + + groups: list[dict[str, Any]] | Unset = UNSET + if not isinstance(self.groups, Unset): + groups = [] + for groups_item_data in self.groups: + groups_item = groups_item_data.to_dict() + groups.append(groups_item) + + + + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({ + "first_name": first_name, + "id": id, + "avatar_url": avatar_url, + "last_contacted_at": last_contacted_at, + "created_at": created_at, + "updated_at": updated_at, + }) + if last_name is not UNSET: + field_dict["last_name"] = last_name + if middle_name is not UNSET: + field_dict["middle_name"] = middle_name + if prefix is not UNSET: + field_dict["prefix"] = prefix + if suffix is not UNSET: + field_dict["suffix"] = suffix + if nickname is not UNSET: + field_dict["nickname"] = nickname + if company is not UNSET: + field_dict["company"] = company + if department is not UNSET: + field_dict["department"] = department + if title is not UNSET: + field_dict["title"] = title + if birthday is not UNSET: + field_dict["birthday"] = birthday + if how_we_met is not UNSET: + field_dict["how_we_met"] = how_we_met + if is_favorite is not UNSET: + field_dict["is_favorite"] = is_favorite + if is_archived is not UNSET: + field_dict["is_archived"] = is_archived + if is_deceased is not UNSET: + field_dict["is_deceased"] = is_deceased + if deceased_at is not UNSET: + field_dict["deceased_at"] = deceased_at + if contact_frequency_days is not UNSET: + field_dict["contact_frequency_days"] = contact_frequency_days + if stage is not UNSET: + field_dict["stage"] = stage + if deleted_at is not UNSET: + field_dict["deleted_at"] = deleted_at + if tags is not UNSET: + field_dict["tags"] = tags + if groups is not UNSET: + field_dict["groups"] = groups + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + from ..models.group_public import GroupPublic + from ..models.tag_public import TagPublic + d = dict(src_dict) + first_name = d.pop("first_name") + + id = UUID(d.pop("id")) + + + + + def _parse_avatar_url(data: object) -> None | str: + if data is None: + return data + return cast(None | str, data) + + avatar_url = _parse_avatar_url(d.pop("avatar_url")) + + + def _parse_last_contacted_at(data: object) -> datetime.datetime | None: + if data is None: + return data + try: + if not isinstance(data, str): + raise TypeError() + last_contacted_at_type_0 = isoparse(data) + + + + return last_contacted_at_type_0 + except (TypeError, ValueError, AttributeError, KeyError): + pass + return cast(datetime.datetime | None, data) + + last_contacted_at = _parse_last_contacted_at(d.pop("last_contacted_at")) + + + created_at = isoparse(d.pop("created_at")) + + + + + updated_at = isoparse(d.pop("updated_at")) + + + + + def _parse_last_name(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + last_name = _parse_last_name(d.pop("last_name", UNSET)) + + + def _parse_middle_name(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + middle_name = _parse_middle_name(d.pop("middle_name", UNSET)) + + + def _parse_prefix(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + prefix = _parse_prefix(d.pop("prefix", UNSET)) + + + def _parse_suffix(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + suffix = _parse_suffix(d.pop("suffix", UNSET)) + + + def _parse_nickname(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + nickname = _parse_nickname(d.pop("nickname", UNSET)) + + + def _parse_company(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + company = _parse_company(d.pop("company", UNSET)) + + + def _parse_department(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + department = _parse_department(d.pop("department", UNSET)) + + + def _parse_title(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + title = _parse_title(d.pop("title", UNSET)) + + + def _parse_birthday(data: object) -> datetime.date | None | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + try: + if not isinstance(data, str): + raise TypeError() + birthday_type_0 = isoparse(data).date() + + + + return birthday_type_0 + except (TypeError, ValueError, AttributeError, KeyError): + pass + return cast(datetime.date | None | Unset, data) + + birthday = _parse_birthday(d.pop("birthday", UNSET)) + + + def _parse_how_we_met(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + how_we_met = _parse_how_we_met(d.pop("how_we_met", UNSET)) + + + is_favorite = d.pop("is_favorite", UNSET) + + is_archived = d.pop("is_archived", UNSET) + + is_deceased = d.pop("is_deceased", UNSET) + + def _parse_deceased_at(data: object) -> datetime.date | None | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + try: + if not isinstance(data, str): + raise TypeError() + deceased_at_type_0 = isoparse(data).date() + + + + return deceased_at_type_0 + except (TypeError, ValueError, AttributeError, KeyError): + pass + return cast(datetime.date | None | Unset, data) + + deceased_at = _parse_deceased_at(d.pop("deceased_at", UNSET)) + + + def _parse_contact_frequency_days(data: object) -> int | None | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(int | None | Unset, data) + + contact_frequency_days = _parse_contact_frequency_days(d.pop("contact_frequency_days", UNSET)) + + + def _parse_stage(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + stage = _parse_stage(d.pop("stage", UNSET)) + + + def _parse_deleted_at(data: object) -> datetime.datetime | None | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + try: + if not isinstance(data, str): + raise TypeError() + deleted_at_type_0 = isoparse(data) + + + + return deleted_at_type_0 + except (TypeError, ValueError, AttributeError, KeyError): + pass + return cast(datetime.datetime | None | Unset, data) + + deleted_at = _parse_deleted_at(d.pop("deleted_at", UNSET)) + + + _tags = d.pop("tags", UNSET) + tags: list[TagPublic] | Unset = UNSET + if _tags is not UNSET: + tags = [] + for tags_item_data in _tags: + tags_item = TagPublic.from_dict(tags_item_data) + + + + tags.append(tags_item) + + + _groups = d.pop("groups", UNSET) + groups: list[GroupPublic] | Unset = UNSET + if _groups is not UNSET: + groups = [] + for groups_item_data in _groups: + groups_item = GroupPublic.from_dict(groups_item_data) + + + + groups.append(groups_item) + + + contact_public = cls( + first_name=first_name, + id=id, + avatar_url=avatar_url, + last_contacted_at=last_contacted_at, + created_at=created_at, + updated_at=updated_at, + last_name=last_name, + middle_name=middle_name, + prefix=prefix, + suffix=suffix, + nickname=nickname, + company=company, + department=department, + title=title, + birthday=birthday, + how_we_met=how_we_met, + is_favorite=is_favorite, + is_archived=is_archived, + is_deceased=is_deceased, + deceased_at=deceased_at, + contact_frequency_days=contact_frequency_days, + stage=stage, + deleted_at=deleted_at, + tags=tags, + groups=groups, + ) + + + contact_public.additional_properties = d + return contact_public + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/kindred-sdk/personal_crm_client/models/contact_update.py b/kindred-sdk/personal_crm_client/models/contact_update.py new file mode 100644 index 00000000..36483138 --- /dev/null +++ b/kindred-sdk/personal_crm_client/models/contact_update.py @@ -0,0 +1,540 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +from ..types import UNSET, Unset +from dateutil.parser import isoparse +from typing import cast +from uuid import UUID +import datetime + + + + + + +T = TypeVar("T", bound="ContactUpdate") + + + +@_attrs_define +class ContactUpdate: + """ + Attributes: + first_name (None | str | Unset): + last_name (None | str | Unset): + middle_name (None | str | Unset): + prefix (None | str | Unset): + suffix (None | str | Unset): + nickname (None | str | Unset): + company (None | str | Unset): + department (None | str | Unset): + title (None | str | Unset): + birthday (datetime.date | None | Unset): + how_we_met (None | str | Unset): + is_favorite (bool | None | Unset): + is_archived (bool | None | Unset): + is_deceased (bool | None | Unset): + deceased_at (datetime.date | None | Unset): + contact_frequency_days (int | None | Unset): + stage (None | str | Unset): + tag_ids (list[UUID] | None | Unset): + group_ids (list[UUID] | None | Unset): + """ + + first_name: None | str | Unset = UNSET + last_name: None | str | Unset = UNSET + middle_name: None | str | Unset = UNSET + prefix: None | str | Unset = UNSET + suffix: None | str | Unset = UNSET + nickname: None | str | Unset = UNSET + company: None | str | Unset = UNSET + department: None | str | Unset = UNSET + title: None | str | Unset = UNSET + birthday: datetime.date | None | Unset = UNSET + how_we_met: None | str | Unset = UNSET + is_favorite: bool | None | Unset = UNSET + is_archived: bool | None | Unset = UNSET + is_deceased: bool | None | Unset = UNSET + deceased_at: datetime.date | None | Unset = UNSET + contact_frequency_days: int | None | Unset = UNSET + stage: None | str | Unset = UNSET + tag_ids: list[UUID] | None | Unset = UNSET + group_ids: list[UUID] | None | Unset = UNSET + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + first_name: None | str | Unset + if isinstance(self.first_name, Unset): + first_name = UNSET + else: + first_name = self.first_name + + last_name: None | str | Unset + if isinstance(self.last_name, Unset): + last_name = UNSET + else: + last_name = self.last_name + + middle_name: None | str | Unset + if isinstance(self.middle_name, Unset): + middle_name = UNSET + else: + middle_name = self.middle_name + + prefix: None | str | Unset + if isinstance(self.prefix, Unset): + prefix = UNSET + else: + prefix = self.prefix + + suffix: None | str | Unset + if isinstance(self.suffix, Unset): + suffix = UNSET + else: + suffix = self.suffix + + nickname: None | str | Unset + if isinstance(self.nickname, Unset): + nickname = UNSET + else: + nickname = self.nickname + + company: None | str | Unset + if isinstance(self.company, Unset): + company = UNSET + else: + company = self.company + + department: None | str | Unset + if isinstance(self.department, Unset): + department = UNSET + else: + department = self.department + + title: None | str | Unset + if isinstance(self.title, Unset): + title = UNSET + else: + title = self.title + + birthday: None | str | Unset + if isinstance(self.birthday, Unset): + birthday = UNSET + elif isinstance(self.birthday, datetime.date): + birthday = self.birthday.isoformat() + else: + birthday = self.birthday + + how_we_met: None | str | Unset + if isinstance(self.how_we_met, Unset): + how_we_met = UNSET + else: + how_we_met = self.how_we_met + + is_favorite: bool | None | Unset + if isinstance(self.is_favorite, Unset): + is_favorite = UNSET + else: + is_favorite = self.is_favorite + + is_archived: bool | None | Unset + if isinstance(self.is_archived, Unset): + is_archived = UNSET + else: + is_archived = self.is_archived + + is_deceased: bool | None | Unset + if isinstance(self.is_deceased, Unset): + is_deceased = UNSET + else: + is_deceased = self.is_deceased + + deceased_at: None | str | Unset + if isinstance(self.deceased_at, Unset): + deceased_at = UNSET + elif isinstance(self.deceased_at, datetime.date): + deceased_at = self.deceased_at.isoformat() + else: + deceased_at = self.deceased_at + + contact_frequency_days: int | None | Unset + if isinstance(self.contact_frequency_days, Unset): + contact_frequency_days = UNSET + else: + contact_frequency_days = self.contact_frequency_days + + stage: None | str | Unset + if isinstance(self.stage, Unset): + stage = UNSET + else: + stage = self.stage + + tag_ids: list[str] | None | Unset + if isinstance(self.tag_ids, Unset): + tag_ids = UNSET + elif isinstance(self.tag_ids, list): + tag_ids = [] + for tag_ids_type_0_item_data in self.tag_ids: + tag_ids_type_0_item = str(tag_ids_type_0_item_data) + tag_ids.append(tag_ids_type_0_item) + + + else: + tag_ids = self.tag_ids + + group_ids: list[str] | None | Unset + if isinstance(self.group_ids, Unset): + group_ids = UNSET + elif isinstance(self.group_ids, list): + group_ids = [] + for group_ids_type_0_item_data in self.group_ids: + group_ids_type_0_item = str(group_ids_type_0_item_data) + group_ids.append(group_ids_type_0_item) + + + else: + group_ids = self.group_ids + + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({ + }) + if first_name is not UNSET: + field_dict["first_name"] = first_name + if last_name is not UNSET: + field_dict["last_name"] = last_name + if middle_name is not UNSET: + field_dict["middle_name"] = middle_name + if prefix is not UNSET: + field_dict["prefix"] = prefix + if suffix is not UNSET: + field_dict["suffix"] = suffix + if nickname is not UNSET: + field_dict["nickname"] = nickname + if company is not UNSET: + field_dict["company"] = company + if department is not UNSET: + field_dict["department"] = department + if title is not UNSET: + field_dict["title"] = title + if birthday is not UNSET: + field_dict["birthday"] = birthday + if how_we_met is not UNSET: + field_dict["how_we_met"] = how_we_met + if is_favorite is not UNSET: + field_dict["is_favorite"] = is_favorite + if is_archived is not UNSET: + field_dict["is_archived"] = is_archived + if is_deceased is not UNSET: + field_dict["is_deceased"] = is_deceased + if deceased_at is not UNSET: + field_dict["deceased_at"] = deceased_at + if contact_frequency_days is not UNSET: + field_dict["contact_frequency_days"] = contact_frequency_days + if stage is not UNSET: + field_dict["stage"] = stage + if tag_ids is not UNSET: + field_dict["tag_ids"] = tag_ids + if group_ids is not UNSET: + field_dict["group_ids"] = group_ids + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + def _parse_first_name(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + first_name = _parse_first_name(d.pop("first_name", UNSET)) + + + def _parse_last_name(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + last_name = _parse_last_name(d.pop("last_name", UNSET)) + + + def _parse_middle_name(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + middle_name = _parse_middle_name(d.pop("middle_name", UNSET)) + + + def _parse_prefix(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + prefix = _parse_prefix(d.pop("prefix", UNSET)) + + + def _parse_suffix(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + suffix = _parse_suffix(d.pop("suffix", UNSET)) + + + def _parse_nickname(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + nickname = _parse_nickname(d.pop("nickname", UNSET)) + + + def _parse_company(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + company = _parse_company(d.pop("company", UNSET)) + + + def _parse_department(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + department = _parse_department(d.pop("department", UNSET)) + + + def _parse_title(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + title = _parse_title(d.pop("title", UNSET)) + + + def _parse_birthday(data: object) -> datetime.date | None | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + try: + if not isinstance(data, str): + raise TypeError() + birthday_type_0 = isoparse(data).date() + + + + return birthday_type_0 + except (TypeError, ValueError, AttributeError, KeyError): + pass + return cast(datetime.date | None | Unset, data) + + birthday = _parse_birthday(d.pop("birthday", UNSET)) + + + def _parse_how_we_met(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + how_we_met = _parse_how_we_met(d.pop("how_we_met", UNSET)) + + + def _parse_is_favorite(data: object) -> bool | None | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(bool | None | Unset, data) + + is_favorite = _parse_is_favorite(d.pop("is_favorite", UNSET)) + + + def _parse_is_archived(data: object) -> bool | None | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(bool | None | Unset, data) + + is_archived = _parse_is_archived(d.pop("is_archived", UNSET)) + + + def _parse_is_deceased(data: object) -> bool | None | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(bool | None | Unset, data) + + is_deceased = _parse_is_deceased(d.pop("is_deceased", UNSET)) + + + def _parse_deceased_at(data: object) -> datetime.date | None | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + try: + if not isinstance(data, str): + raise TypeError() + deceased_at_type_0 = isoparse(data).date() + + + + return deceased_at_type_0 + except (TypeError, ValueError, AttributeError, KeyError): + pass + return cast(datetime.date | None | Unset, data) + + deceased_at = _parse_deceased_at(d.pop("deceased_at", UNSET)) + + + def _parse_contact_frequency_days(data: object) -> int | None | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(int | None | Unset, data) + + contact_frequency_days = _parse_contact_frequency_days(d.pop("contact_frequency_days", UNSET)) + + + def _parse_stage(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + stage = _parse_stage(d.pop("stage", UNSET)) + + + def _parse_tag_ids(data: object) -> list[UUID] | None | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + try: + if not isinstance(data, list): + raise TypeError() + tag_ids_type_0 = [] + _tag_ids_type_0 = data + for tag_ids_type_0_item_data in (_tag_ids_type_0): + tag_ids_type_0_item = UUID(tag_ids_type_0_item_data) + + + + tag_ids_type_0.append(tag_ids_type_0_item) + + return tag_ids_type_0 + except (TypeError, ValueError, AttributeError, KeyError): + pass + return cast(list[UUID] | None | Unset, data) + + tag_ids = _parse_tag_ids(d.pop("tag_ids", UNSET)) + + + def _parse_group_ids(data: object) -> list[UUID] | None | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + try: + if not isinstance(data, list): + raise TypeError() + group_ids_type_0 = [] + _group_ids_type_0 = data + for group_ids_type_0_item_data in (_group_ids_type_0): + group_ids_type_0_item = UUID(group_ids_type_0_item_data) + + + + group_ids_type_0.append(group_ids_type_0_item) + + return group_ids_type_0 + except (TypeError, ValueError, AttributeError, KeyError): + pass + return cast(list[UUID] | None | Unset, data) + + group_ids = _parse_group_ids(d.pop("group_ids", UNSET)) + + + contact_update = cls( + first_name=first_name, + last_name=last_name, + middle_name=middle_name, + prefix=prefix, + suffix=suffix, + nickname=nickname, + company=company, + department=department, + title=title, + birthday=birthday, + how_we_met=how_we_met, + is_favorite=is_favorite, + is_archived=is_archived, + is_deceased=is_deceased, + deceased_at=deceased_at, + contact_frequency_days=contact_frequency_days, + stage=stage, + tag_ids=tag_ids, + group_ids=group_ids, + ) + + + contact_update.additional_properties = d + return contact_update + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/kindred-sdk/personal_crm_client/models/contacts_public.py b/kindred-sdk/personal_crm_client/models/contacts_public.py new file mode 100644 index 00000000..3bfb0f48 --- /dev/null +++ b/kindred-sdk/personal_crm_client/models/contacts_public.py @@ -0,0 +1,102 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +from typing import cast + +if TYPE_CHECKING: + from ..models.contact_public import ContactPublic + + + + + +T = TypeVar("T", bound="ContactsPublic") + + + +@_attrs_define +class ContactsPublic: + """ + Attributes: + data (list[ContactPublic]): + count (int): + """ + + data: list[ContactPublic] + count: int + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + from ..models.contact_public import ContactPublic + data = [] + for data_item_data in self.data: + data_item = data_item_data.to_dict() + data.append(data_item) + + + + count = self.count + + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({ + "data": data, + "count": count, + }) + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + from ..models.contact_public import ContactPublic + d = dict(src_dict) + data = [] + _data = d.pop("data") + for data_item_data in (_data): + data_item = ContactPublic.from_dict(data_item_data) + + + + data.append(data_item) + + + count = d.pop("count") + + contacts_public = cls( + data=data, + count=count, + ) + + + contacts_public.additional_properties = d + return contacts_public + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/kindred-sdk/personal_crm_client/models/custom_field_definition_create.py b/kindred-sdk/personal_crm_client/models/custom_field_definition_create.py new file mode 100644 index 00000000..a7fa70f3 --- /dev/null +++ b/kindred-sdk/personal_crm_client/models/custom_field_definition_create.py @@ -0,0 +1,150 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +from ..types import UNSET, Unset +from typing import cast + + + + + + +T = TypeVar("T", bound="CustomFieldDefinitionCreate") + + + +@_attrs_define +class CustomFieldDefinitionCreate: + """ + Attributes: + name (str): Custom field name shown in the UI. + field_type (str | Unset): Field type: text, number, date, boolean, or select. Default: 'text'. + description (None | str | Unset): Help text displayed alongside the field in the UI. + options (None | str | Unset): Comma-separated options for field_type="select". + icon (None | str | Unset): Icon slug for the UI (e.g. "heart", "book"). + """ + + name: str + field_type: str | Unset = 'text' + description: None | str | Unset = UNSET + options: None | str | Unset = UNSET + icon: None | str | Unset = UNSET + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + name = self.name + + field_type = self.field_type + + description: None | str | Unset + if isinstance(self.description, Unset): + description = UNSET + else: + description = self.description + + options: None | str | Unset + if isinstance(self.options, Unset): + options = UNSET + else: + options = self.options + + icon: None | str | Unset + if isinstance(self.icon, Unset): + icon = UNSET + else: + icon = self.icon + + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({ + "name": name, + }) + if field_type is not UNSET: + field_dict["field_type"] = field_type + if description is not UNSET: + field_dict["description"] = description + if options is not UNSET: + field_dict["options"] = options + if icon is not UNSET: + field_dict["icon"] = icon + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + name = d.pop("name") + + field_type = d.pop("field_type", UNSET) + + def _parse_description(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + description = _parse_description(d.pop("description", UNSET)) + + + def _parse_options(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + options = _parse_options(d.pop("options", UNSET)) + + + def _parse_icon(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + icon = _parse_icon(d.pop("icon", UNSET)) + + + custom_field_definition_create = cls( + name=name, + field_type=field_type, + description=description, + options=options, + icon=icon, + ) + + + custom_field_definition_create.additional_properties = d + return custom_field_definition_create + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/kindred-sdk/personal_crm_client/models/custom_field_definition_public.py b/kindred-sdk/personal_crm_client/models/custom_field_definition_public.py new file mode 100644 index 00000000..77475d46 --- /dev/null +++ b/kindred-sdk/personal_crm_client/models/custom_field_definition_public.py @@ -0,0 +1,175 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +from ..types import UNSET, Unset +from dateutil.parser import isoparse +from typing import cast +from uuid import UUID +import datetime + + + + + + +T = TypeVar("T", bound="CustomFieldDefinitionPublic") + + + +@_attrs_define +class CustomFieldDefinitionPublic: + """ + Attributes: + name (str): Custom field name shown in the UI. + id (UUID): + created_at (datetime.datetime): + field_type (str | Unset): Field type: text, number, date, boolean, or select. Default: 'text'. + description (None | str | Unset): Help text displayed alongside the field in the UI. + options (None | str | Unset): Comma-separated options for field_type="select". + icon (None | str | Unset): Icon slug for the UI (e.g. "heart", "book"). + """ + + name: str + id: UUID + created_at: datetime.datetime + field_type: str | Unset = 'text' + description: None | str | Unset = UNSET + options: None | str | Unset = UNSET + icon: None | str | Unset = UNSET + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + name = self.name + + id = str(self.id) + + created_at = self.created_at.isoformat() + + field_type = self.field_type + + description: None | str | Unset + if isinstance(self.description, Unset): + description = UNSET + else: + description = self.description + + options: None | str | Unset + if isinstance(self.options, Unset): + options = UNSET + else: + options = self.options + + icon: None | str | Unset + if isinstance(self.icon, Unset): + icon = UNSET + else: + icon = self.icon + + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({ + "name": name, + "id": id, + "created_at": created_at, + }) + if field_type is not UNSET: + field_dict["field_type"] = field_type + if description is not UNSET: + field_dict["description"] = description + if options is not UNSET: + field_dict["options"] = options + if icon is not UNSET: + field_dict["icon"] = icon + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + name = d.pop("name") + + id = UUID(d.pop("id")) + + + + + created_at = isoparse(d.pop("created_at")) + + + + + field_type = d.pop("field_type", UNSET) + + def _parse_description(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + description = _parse_description(d.pop("description", UNSET)) + + + def _parse_options(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + options = _parse_options(d.pop("options", UNSET)) + + + def _parse_icon(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + icon = _parse_icon(d.pop("icon", UNSET)) + + + custom_field_definition_public = cls( + name=name, + id=id, + created_at=created_at, + field_type=field_type, + description=description, + options=options, + icon=icon, + ) + + + custom_field_definition_public.additional_properties = d + return custom_field_definition_public + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/kindred-sdk/personal_crm_client/models/custom_field_definition_update.py b/kindred-sdk/personal_crm_client/models/custom_field_definition_update.py new file mode 100644 index 00000000..3b370c1f --- /dev/null +++ b/kindred-sdk/personal_crm_client/models/custom_field_definition_update.py @@ -0,0 +1,175 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +from ..types import UNSET, Unset +from typing import cast + + + + + + +T = TypeVar("T", bound="CustomFieldDefinitionUpdate") + + + +@_attrs_define +class CustomFieldDefinitionUpdate: + """ + Attributes: + name (None | str | Unset): + field_type (None | str | Unset): + description (None | str | Unset): + options (None | str | Unset): + icon (None | str | Unset): + """ + + name: None | str | Unset = UNSET + field_type: None | str | Unset = UNSET + description: None | str | Unset = UNSET + options: None | str | Unset = UNSET + icon: None | str | Unset = UNSET + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + name: None | str | Unset + if isinstance(self.name, Unset): + name = UNSET + else: + name = self.name + + field_type: None | str | Unset + if isinstance(self.field_type, Unset): + field_type = UNSET + else: + field_type = self.field_type + + description: None | str | Unset + if isinstance(self.description, Unset): + description = UNSET + else: + description = self.description + + options: None | str | Unset + if isinstance(self.options, Unset): + options = UNSET + else: + options = self.options + + icon: None | str | Unset + if isinstance(self.icon, Unset): + icon = UNSET + else: + icon = self.icon + + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({ + }) + if name is not UNSET: + field_dict["name"] = name + if field_type is not UNSET: + field_dict["field_type"] = field_type + if description is not UNSET: + field_dict["description"] = description + if options is not UNSET: + field_dict["options"] = options + if icon is not UNSET: + field_dict["icon"] = icon + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + def _parse_name(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + name = _parse_name(d.pop("name", UNSET)) + + + def _parse_field_type(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + field_type = _parse_field_type(d.pop("field_type", UNSET)) + + + def _parse_description(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + description = _parse_description(d.pop("description", UNSET)) + + + def _parse_options(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + options = _parse_options(d.pop("options", UNSET)) + + + def _parse_icon(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + icon = _parse_icon(d.pop("icon", UNSET)) + + + custom_field_definition_update = cls( + name=name, + field_type=field_type, + description=description, + options=options, + icon=icon, + ) + + + custom_field_definition_update.additional_properties = d + return custom_field_definition_update + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/kindred-sdk/personal_crm_client/models/custom_field_value_create.py b/kindred-sdk/personal_crm_client/models/custom_field_value_create.py new file mode 100644 index 00000000..c18436ea --- /dev/null +++ b/kindred-sdk/personal_crm_client/models/custom_field_value_create.py @@ -0,0 +1,99 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +from uuid import UUID + + + + + + +T = TypeVar("T", bound="CustomFieldValueCreate") + + + +@_attrs_define +class CustomFieldValueCreate: + """ + Attributes: + value (str): Value as a string; coerced from the declared field_type. + contact_id (UUID): + field_definition_id (UUID): + """ + + value: str + contact_id: UUID + field_definition_id: UUID + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + value = self.value + + contact_id = str(self.contact_id) + + field_definition_id = str(self.field_definition_id) + + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({ + "value": value, + "contact_id": contact_id, + "field_definition_id": field_definition_id, + }) + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + value = d.pop("value") + + contact_id = UUID(d.pop("contact_id")) + + + + + field_definition_id = UUID(d.pop("field_definition_id")) + + + + + custom_field_value_create = cls( + value=value, + contact_id=contact_id, + field_definition_id=field_definition_id, + ) + + + custom_field_value_create.additional_properties = d + return custom_field_value_create + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/kindred-sdk/personal_crm_client/models/custom_field_value_public.py b/kindred-sdk/personal_crm_client/models/custom_field_value_public.py new file mode 100644 index 00000000..8e085431 --- /dev/null +++ b/kindred-sdk/personal_crm_client/models/custom_field_value_public.py @@ -0,0 +1,133 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +from ..types import UNSET, Unset +from typing import cast +from uuid import UUID + + + + + + +T = TypeVar("T", bound="CustomFieldValuePublic") + + + +@_attrs_define +class CustomFieldValuePublic: + """ + Attributes: + value (str): Value as a string; coerced from the declared field_type. + id (UUID): + contact_id (UUID): + field_definition_id (UUID): + field_name (None | str | Unset): + """ + + value: str + id: UUID + contact_id: UUID + field_definition_id: UUID + field_name: None | str | Unset = UNSET + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + value = self.value + + id = str(self.id) + + contact_id = str(self.contact_id) + + field_definition_id = str(self.field_definition_id) + + field_name: None | str | Unset + if isinstance(self.field_name, Unset): + field_name = UNSET + else: + field_name = self.field_name + + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({ + "value": value, + "id": id, + "contact_id": contact_id, + "field_definition_id": field_definition_id, + }) + if field_name is not UNSET: + field_dict["field_name"] = field_name + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + value = d.pop("value") + + id = UUID(d.pop("id")) + + + + + contact_id = UUID(d.pop("contact_id")) + + + + + field_definition_id = UUID(d.pop("field_definition_id")) + + + + + def _parse_field_name(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + field_name = _parse_field_name(d.pop("field_name", UNSET)) + + + custom_field_value_public = cls( + value=value, + id=id, + contact_id=contact_id, + field_definition_id=field_definition_id, + field_name=field_name, + ) + + + custom_field_value_public.additional_properties = d + return custom_field_value_public + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/kindred-sdk/personal_crm_client/models/custom_field_value_update.py b/kindred-sdk/personal_crm_client/models/custom_field_value_update.py new file mode 100644 index 00000000..b1c1225f --- /dev/null +++ b/kindred-sdk/personal_crm_client/models/custom_field_value_update.py @@ -0,0 +1,91 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +from ..types import UNSET, Unset +from typing import cast + + + + + + +T = TypeVar("T", bound="CustomFieldValueUpdate") + + + +@_attrs_define +class CustomFieldValueUpdate: + """ + Attributes: + value (None | str | Unset): + """ + + value: None | str | Unset = UNSET + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + value: None | str | Unset + if isinstance(self.value, Unset): + value = UNSET + else: + value = self.value + + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({ + }) + if value is not UNSET: + field_dict["value"] = value + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + def _parse_value(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + value = _parse_value(d.pop("value", UNSET)) + + + custom_field_value_update = cls( + value=value, + ) + + + custom_field_value_update.additional_properties = d + return custom_field_value_update + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/kindred-sdk/personal_crm_client/models/debt_create.py b/kindred-sdk/personal_crm_client/models/debt_create.py new file mode 100644 index 00000000..5b8c1fc0 --- /dev/null +++ b/kindred-sdk/personal_crm_client/models/debt_create.py @@ -0,0 +1,176 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +from ..models.debt_direction import DebtDirection +from ..types import UNSET, Unset +from dateutil.parser import isoparse +from typing import cast +from uuid import UUID +import datetime + + + + + + +T = TypeVar("T", bound="DebtCreate") + + + +@_attrs_define +class DebtCreate: + """ + Attributes: + direction (DebtDirection): + amount (float): Amount owed; must be greater than zero. + contact_id (UUID): + currency (str | Unset): ISO 4217 currency code. Default: 'USD'. + reason (None | str | Unset): What the debt is for. + is_settled (bool | Unset): Marked paid off. Default: False. + settled_at (datetime.date | None | Unset): Date the debt was settled. + """ + + direction: DebtDirection + amount: float + contact_id: UUID + currency: str | Unset = 'USD' + reason: None | str | Unset = UNSET + is_settled: bool | Unset = False + settled_at: datetime.date | None | Unset = UNSET + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + direction = self.direction.value + + amount = self.amount + + contact_id = str(self.contact_id) + + currency = self.currency + + reason: None | str | Unset + if isinstance(self.reason, Unset): + reason = UNSET + else: + reason = self.reason + + is_settled = self.is_settled + + settled_at: None | str | Unset + if isinstance(self.settled_at, Unset): + settled_at = UNSET + elif isinstance(self.settled_at, datetime.date): + settled_at = self.settled_at.isoformat() + else: + settled_at = self.settled_at + + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({ + "direction": direction, + "amount": amount, + "contact_id": contact_id, + }) + if currency is not UNSET: + field_dict["currency"] = currency + if reason is not UNSET: + field_dict["reason"] = reason + if is_settled is not UNSET: + field_dict["is_settled"] = is_settled + if settled_at is not UNSET: + field_dict["settled_at"] = settled_at + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + direction = DebtDirection(d.pop("direction")) + + + + + amount = d.pop("amount") + + contact_id = UUID(d.pop("contact_id")) + + + + + currency = d.pop("currency", UNSET) + + def _parse_reason(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + reason = _parse_reason(d.pop("reason", UNSET)) + + + is_settled = d.pop("is_settled", UNSET) + + def _parse_settled_at(data: object) -> datetime.date | None | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + try: + if not isinstance(data, str): + raise TypeError() + settled_at_type_0 = isoparse(data).date() + + + + return settled_at_type_0 + except (TypeError, ValueError, AttributeError, KeyError): + pass + return cast(datetime.date | None | Unset, data) + + settled_at = _parse_settled_at(d.pop("settled_at", UNSET)) + + + debt_create = cls( + direction=direction, + amount=amount, + contact_id=contact_id, + currency=currency, + reason=reason, + is_settled=is_settled, + settled_at=settled_at, + ) + + + debt_create.additional_properties = d + return debt_create + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/kindred-sdk/personal_crm_client/models/debt_direction.py b/kindred-sdk/personal_crm_client/models/debt_direction.py new file mode 100644 index 00000000..f6819da5 --- /dev/null +++ b/kindred-sdk/personal_crm_client/models/debt_direction.py @@ -0,0 +1,8 @@ +from enum import Enum + +class DebtDirection(str, Enum): + I_OWE = "i_owe" + THEY_OWE = "they_owe" + + def __str__(self) -> str: + return str(self.value) diff --git a/kindred-sdk/personal_crm_client/models/debt_public.py b/kindred-sdk/personal_crm_client/models/debt_public.py new file mode 100644 index 00000000..c39ea331 --- /dev/null +++ b/kindred-sdk/personal_crm_client/models/debt_public.py @@ -0,0 +1,198 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +from ..models.debt_direction import DebtDirection +from ..types import UNSET, Unset +from dateutil.parser import isoparse +from typing import cast +from uuid import UUID +import datetime + + + + + + +T = TypeVar("T", bound="DebtPublic") + + + +@_attrs_define +class DebtPublic: + """ + Attributes: + direction (DebtDirection): + amount (float): Amount owed; must be greater than zero. + id (UUID): + contact_id (UUID): + created_at (datetime.datetime): + currency (str | Unset): ISO 4217 currency code. Default: 'USD'. + reason (None | str | Unset): What the debt is for. + is_settled (bool | Unset): Marked paid off. Default: False. + settled_at (datetime.date | None | Unset): Date the debt was settled. + """ + + direction: DebtDirection + amount: float + id: UUID + contact_id: UUID + created_at: datetime.datetime + currency: str | Unset = 'USD' + reason: None | str | Unset = UNSET + is_settled: bool | Unset = False + settled_at: datetime.date | None | Unset = UNSET + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + direction = self.direction.value + + amount = self.amount + + id = str(self.id) + + contact_id = str(self.contact_id) + + created_at = self.created_at.isoformat() + + currency = self.currency + + reason: None | str | Unset + if isinstance(self.reason, Unset): + reason = UNSET + else: + reason = self.reason + + is_settled = self.is_settled + + settled_at: None | str | Unset + if isinstance(self.settled_at, Unset): + settled_at = UNSET + elif isinstance(self.settled_at, datetime.date): + settled_at = self.settled_at.isoformat() + else: + settled_at = self.settled_at + + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({ + "direction": direction, + "amount": amount, + "id": id, + "contact_id": contact_id, + "created_at": created_at, + }) + if currency is not UNSET: + field_dict["currency"] = currency + if reason is not UNSET: + field_dict["reason"] = reason + if is_settled is not UNSET: + field_dict["is_settled"] = is_settled + if settled_at is not UNSET: + field_dict["settled_at"] = settled_at + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + direction = DebtDirection(d.pop("direction")) + + + + + amount = d.pop("amount") + + id = UUID(d.pop("id")) + + + + + contact_id = UUID(d.pop("contact_id")) + + + + + created_at = isoparse(d.pop("created_at")) + + + + + currency = d.pop("currency", UNSET) + + def _parse_reason(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + reason = _parse_reason(d.pop("reason", UNSET)) + + + is_settled = d.pop("is_settled", UNSET) + + def _parse_settled_at(data: object) -> datetime.date | None | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + try: + if not isinstance(data, str): + raise TypeError() + settled_at_type_0 = isoparse(data).date() + + + + return settled_at_type_0 + except (TypeError, ValueError, AttributeError, KeyError): + pass + return cast(datetime.date | None | Unset, data) + + settled_at = _parse_settled_at(d.pop("settled_at", UNSET)) + + + debt_public = cls( + direction=direction, + amount=amount, + id=id, + contact_id=contact_id, + created_at=created_at, + currency=currency, + reason=reason, + is_settled=is_settled, + settled_at=settled_at, + ) + + + debt_public.additional_properties = d + return debt_public + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/kindred-sdk/personal_crm_client/models/debt_update.py b/kindred-sdk/personal_crm_client/models/debt_update.py new file mode 100644 index 00000000..7589c2fc --- /dev/null +++ b/kindred-sdk/personal_crm_client/models/debt_update.py @@ -0,0 +1,223 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +from ..models.debt_direction import DebtDirection +from ..types import UNSET, Unset +from dateutil.parser import isoparse +from typing import cast +import datetime + + + + + + +T = TypeVar("T", bound="DebtUpdate") + + + +@_attrs_define +class DebtUpdate: + """ + Attributes: + direction (DebtDirection | None | Unset): + amount (float | None | Unset): + currency (None | str | Unset): + reason (None | str | Unset): + is_settled (bool | None | Unset): + settled_at (datetime.date | None | Unset): + """ + + direction: DebtDirection | None | Unset = UNSET + amount: float | None | Unset = UNSET + currency: None | str | Unset = UNSET + reason: None | str | Unset = UNSET + is_settled: bool | None | Unset = UNSET + settled_at: datetime.date | None | Unset = UNSET + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + direction: None | str | Unset + if isinstance(self.direction, Unset): + direction = UNSET + elif isinstance(self.direction, DebtDirection): + direction = self.direction.value + else: + direction = self.direction + + amount: float | None | Unset + if isinstance(self.amount, Unset): + amount = UNSET + else: + amount = self.amount + + currency: None | str | Unset + if isinstance(self.currency, Unset): + currency = UNSET + else: + currency = self.currency + + reason: None | str | Unset + if isinstance(self.reason, Unset): + reason = UNSET + else: + reason = self.reason + + is_settled: bool | None | Unset + if isinstance(self.is_settled, Unset): + is_settled = UNSET + else: + is_settled = self.is_settled + + settled_at: None | str | Unset + if isinstance(self.settled_at, Unset): + settled_at = UNSET + elif isinstance(self.settled_at, datetime.date): + settled_at = self.settled_at.isoformat() + else: + settled_at = self.settled_at + + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({ + }) + if direction is not UNSET: + field_dict["direction"] = direction + if amount is not UNSET: + field_dict["amount"] = amount + if currency is not UNSET: + field_dict["currency"] = currency + if reason is not UNSET: + field_dict["reason"] = reason + if is_settled is not UNSET: + field_dict["is_settled"] = is_settled + if settled_at is not UNSET: + field_dict["settled_at"] = settled_at + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + def _parse_direction(data: object) -> DebtDirection | None | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + try: + if not isinstance(data, str): + raise TypeError() + direction_type_0 = DebtDirection(data) + + + + return direction_type_0 + except (TypeError, ValueError, AttributeError, KeyError): + pass + return cast(DebtDirection | None | Unset, data) + + direction = _parse_direction(d.pop("direction", UNSET)) + + + def _parse_amount(data: object) -> float | None | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(float | None | Unset, data) + + amount = _parse_amount(d.pop("amount", UNSET)) + + + def _parse_currency(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + currency = _parse_currency(d.pop("currency", UNSET)) + + + def _parse_reason(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + reason = _parse_reason(d.pop("reason", UNSET)) + + + def _parse_is_settled(data: object) -> bool | None | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(bool | None | Unset, data) + + is_settled = _parse_is_settled(d.pop("is_settled", UNSET)) + + + def _parse_settled_at(data: object) -> datetime.date | None | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + try: + if not isinstance(data, str): + raise TypeError() + settled_at_type_0 = isoparse(data).date() + + + + return settled_at_type_0 + except (TypeError, ValueError, AttributeError, KeyError): + pass + return cast(datetime.date | None | Unset, data) + + settled_at = _parse_settled_at(d.pop("settled_at", UNSET)) + + + debt_update = cls( + direction=direction, + amount=amount, + currency=currency, + reason=reason, + is_settled=is_settled, + settled_at=settled_at, + ) + + + debt_update.additional_properties = d + return debt_update + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/kindred-sdk/personal_crm_client/models/debts_public.py b/kindred-sdk/personal_crm_client/models/debts_public.py new file mode 100644 index 00000000..1a4f7f91 --- /dev/null +++ b/kindred-sdk/personal_crm_client/models/debts_public.py @@ -0,0 +1,102 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +from typing import cast + +if TYPE_CHECKING: + from ..models.debt_public import DebtPublic + + + + + +T = TypeVar("T", bound="DebtsPublic") + + + +@_attrs_define +class DebtsPublic: + """ + Attributes: + data (list[DebtPublic]): + count (int): + """ + + data: list[DebtPublic] + count: int + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + from ..models.debt_public import DebtPublic + data = [] + for data_item_data in self.data: + data_item = data_item_data.to_dict() + data.append(data_item) + + + + count = self.count + + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({ + "data": data, + "count": count, + }) + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + from ..models.debt_public import DebtPublic + d = dict(src_dict) + data = [] + _data = d.pop("data") + for data_item_data in (_data): + data_item = DebtPublic.from_dict(data_item_data) + + + + data.append(data_item) + + + count = d.pop("count") + + debts_public = cls( + data=data, + count=count, + ) + + + debts_public.additional_properties = d + return debts_public + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/kindred-sdk/personal_crm_client/models/gift_create.py b/kindred-sdk/personal_crm_client/models/gift_create.py new file mode 100644 index 00000000..d8400a4b --- /dev/null +++ b/kindred-sdk/personal_crm_client/models/gift_create.py @@ -0,0 +1,239 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +from ..models.gift_status import GiftStatus +from ..types import UNSET, Unset +from dateutil.parser import isoparse +from typing import cast +from uuid import UUID +import datetime + + + + + + +T = TypeVar("T", bound="GiftCreate") + + + +@_attrs_define +class GiftCreate: + """ + Attributes: + name (str): Gift name. + contact_id (UUID): + description (None | str | Unset): Details about the gift. + status (GiftStatus | Unset): + occasion (None | str | Unset): Occasion like Birthday, Christmas, Housewarming. + gift_date (datetime.date | None | Unset): When the gift was given or received. + value_amount (float | None | Unset): Monetary cost or value. + value_currency (str | Unset): ISO 4217 currency code. Default: 'USD'. + url (None | str | Unset): Link to the product page (e.g. Amazon). + """ + + name: str + contact_id: UUID + description: None | str | Unset = UNSET + status: GiftStatus | Unset = UNSET + occasion: None | str | Unset = UNSET + gift_date: datetime.date | None | Unset = UNSET + value_amount: float | None | Unset = UNSET + value_currency: str | Unset = 'USD' + url: None | str | Unset = UNSET + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + name = self.name + + contact_id = str(self.contact_id) + + description: None | str | Unset + if isinstance(self.description, Unset): + description = UNSET + else: + description = self.description + + status: str | Unset = UNSET + if not isinstance(self.status, Unset): + status = self.status.value + + + occasion: None | str | Unset + if isinstance(self.occasion, Unset): + occasion = UNSET + else: + occasion = self.occasion + + gift_date: None | str | Unset + if isinstance(self.gift_date, Unset): + gift_date = UNSET + elif isinstance(self.gift_date, datetime.date): + gift_date = self.gift_date.isoformat() + else: + gift_date = self.gift_date + + value_amount: float | None | Unset + if isinstance(self.value_amount, Unset): + value_amount = UNSET + else: + value_amount = self.value_amount + + value_currency = self.value_currency + + url: None | str | Unset + if isinstance(self.url, Unset): + url = UNSET + else: + url = self.url + + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({ + "name": name, + "contact_id": contact_id, + }) + if description is not UNSET: + field_dict["description"] = description + if status is not UNSET: + field_dict["status"] = status + if occasion is not UNSET: + field_dict["occasion"] = occasion + if gift_date is not UNSET: + field_dict["gift_date"] = gift_date + if value_amount is not UNSET: + field_dict["value_amount"] = value_amount + if value_currency is not UNSET: + field_dict["value_currency"] = value_currency + if url is not UNSET: + field_dict["url"] = url + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + name = d.pop("name") + + contact_id = UUID(d.pop("contact_id")) + + + + + def _parse_description(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + description = _parse_description(d.pop("description", UNSET)) + + + _status = d.pop("status", UNSET) + status: GiftStatus | Unset + if isinstance(_status, Unset): + status = UNSET + else: + status = GiftStatus(_status) + + + + + def _parse_occasion(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + occasion = _parse_occasion(d.pop("occasion", UNSET)) + + + def _parse_gift_date(data: object) -> datetime.date | None | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + try: + if not isinstance(data, str): + raise TypeError() + gift_date_type_0 = isoparse(data).date() + + + + return gift_date_type_0 + except (TypeError, ValueError, AttributeError, KeyError): + pass + return cast(datetime.date | None | Unset, data) + + gift_date = _parse_gift_date(d.pop("gift_date", UNSET)) + + + def _parse_value_amount(data: object) -> float | None | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(float | None | Unset, data) + + value_amount = _parse_value_amount(d.pop("value_amount", UNSET)) + + + value_currency = d.pop("value_currency", UNSET) + + def _parse_url(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + url = _parse_url(d.pop("url", UNSET)) + + + gift_create = cls( + name=name, + contact_id=contact_id, + description=description, + status=status, + occasion=occasion, + gift_date=gift_date, + value_amount=value_amount, + value_currency=value_currency, + url=url, + ) + + + gift_create.additional_properties = d + return gift_create + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/kindred-sdk/personal_crm_client/models/gift_public.py b/kindred-sdk/personal_crm_client/models/gift_public.py new file mode 100644 index 00000000..9611cf4a --- /dev/null +++ b/kindred-sdk/personal_crm_client/models/gift_public.py @@ -0,0 +1,261 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +from ..models.gift_status import GiftStatus +from ..types import UNSET, Unset +from dateutil.parser import isoparse +from typing import cast +from uuid import UUID +import datetime + + + + + + +T = TypeVar("T", bound="GiftPublic") + + + +@_attrs_define +class GiftPublic: + """ + Attributes: + name (str): Gift name. + id (UUID): + contact_id (UUID): + created_at (datetime.datetime): + description (None | str | Unset): Details about the gift. + status (GiftStatus | Unset): + occasion (None | str | Unset): Occasion like Birthday, Christmas, Housewarming. + gift_date (datetime.date | None | Unset): When the gift was given or received. + value_amount (float | None | Unset): Monetary cost or value. + value_currency (str | Unset): ISO 4217 currency code. Default: 'USD'. + url (None | str | Unset): Link to the product page (e.g. Amazon). + """ + + name: str + id: UUID + contact_id: UUID + created_at: datetime.datetime + description: None | str | Unset = UNSET + status: GiftStatus | Unset = UNSET + occasion: None | str | Unset = UNSET + gift_date: datetime.date | None | Unset = UNSET + value_amount: float | None | Unset = UNSET + value_currency: str | Unset = 'USD' + url: None | str | Unset = UNSET + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + name = self.name + + id = str(self.id) + + contact_id = str(self.contact_id) + + created_at = self.created_at.isoformat() + + description: None | str | Unset + if isinstance(self.description, Unset): + description = UNSET + else: + description = self.description + + status: str | Unset = UNSET + if not isinstance(self.status, Unset): + status = self.status.value + + + occasion: None | str | Unset + if isinstance(self.occasion, Unset): + occasion = UNSET + else: + occasion = self.occasion + + gift_date: None | str | Unset + if isinstance(self.gift_date, Unset): + gift_date = UNSET + elif isinstance(self.gift_date, datetime.date): + gift_date = self.gift_date.isoformat() + else: + gift_date = self.gift_date + + value_amount: float | None | Unset + if isinstance(self.value_amount, Unset): + value_amount = UNSET + else: + value_amount = self.value_amount + + value_currency = self.value_currency + + url: None | str | Unset + if isinstance(self.url, Unset): + url = UNSET + else: + url = self.url + + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({ + "name": name, + "id": id, + "contact_id": contact_id, + "created_at": created_at, + }) + if description is not UNSET: + field_dict["description"] = description + if status is not UNSET: + field_dict["status"] = status + if occasion is not UNSET: + field_dict["occasion"] = occasion + if gift_date is not UNSET: + field_dict["gift_date"] = gift_date + if value_amount is not UNSET: + field_dict["value_amount"] = value_amount + if value_currency is not UNSET: + field_dict["value_currency"] = value_currency + if url is not UNSET: + field_dict["url"] = url + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + name = d.pop("name") + + id = UUID(d.pop("id")) + + + + + contact_id = UUID(d.pop("contact_id")) + + + + + created_at = isoparse(d.pop("created_at")) + + + + + def _parse_description(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + description = _parse_description(d.pop("description", UNSET)) + + + _status = d.pop("status", UNSET) + status: GiftStatus | Unset + if isinstance(_status, Unset): + status = UNSET + else: + status = GiftStatus(_status) + + + + + def _parse_occasion(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + occasion = _parse_occasion(d.pop("occasion", UNSET)) + + + def _parse_gift_date(data: object) -> datetime.date | None | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + try: + if not isinstance(data, str): + raise TypeError() + gift_date_type_0 = isoparse(data).date() + + + + return gift_date_type_0 + except (TypeError, ValueError, AttributeError, KeyError): + pass + return cast(datetime.date | None | Unset, data) + + gift_date = _parse_gift_date(d.pop("gift_date", UNSET)) + + + def _parse_value_amount(data: object) -> float | None | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(float | None | Unset, data) + + value_amount = _parse_value_amount(d.pop("value_amount", UNSET)) + + + value_currency = d.pop("value_currency", UNSET) + + def _parse_url(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + url = _parse_url(d.pop("url", UNSET)) + + + gift_public = cls( + name=name, + id=id, + contact_id=contact_id, + created_at=created_at, + description=description, + status=status, + occasion=occasion, + gift_date=gift_date, + value_amount=value_amount, + value_currency=value_currency, + url=url, + ) + + + gift_public.additional_properties = d + return gift_public + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/kindred-sdk/personal_crm_client/models/gift_status.py b/kindred-sdk/personal_crm_client/models/gift_status.py new file mode 100644 index 00000000..584edad5 --- /dev/null +++ b/kindred-sdk/personal_crm_client/models/gift_status.py @@ -0,0 +1,9 @@ +from enum import Enum + +class GiftStatus(str, Enum): + GIVEN = "given" + IDEA = "idea" + RECEIVED = "received" + + def __str__(self) -> str: + return str(self.value) diff --git a/kindred-sdk/personal_crm_client/models/gift_update.py b/kindred-sdk/personal_crm_client/models/gift_update.py new file mode 100644 index 00000000..952b372b --- /dev/null +++ b/kindred-sdk/personal_crm_client/models/gift_update.py @@ -0,0 +1,265 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +from ..models.gift_status import GiftStatus +from ..types import UNSET, Unset +from dateutil.parser import isoparse +from typing import cast +import datetime + + + + + + +T = TypeVar("T", bound="GiftUpdate") + + + +@_attrs_define +class GiftUpdate: + """ + Attributes: + name (None | str | Unset): + description (None | str | Unset): + status (GiftStatus | None | Unset): + occasion (None | str | Unset): + gift_date (datetime.date | None | Unset): + value_amount (float | None | Unset): + value_currency (None | str | Unset): + url (None | str | Unset): + """ + + name: None | str | Unset = UNSET + description: None | str | Unset = UNSET + status: GiftStatus | None | Unset = UNSET + occasion: None | str | Unset = UNSET + gift_date: datetime.date | None | Unset = UNSET + value_amount: float | None | Unset = UNSET + value_currency: None | str | Unset = UNSET + url: None | str | Unset = UNSET + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + name: None | str | Unset + if isinstance(self.name, Unset): + name = UNSET + else: + name = self.name + + description: None | str | Unset + if isinstance(self.description, Unset): + description = UNSET + else: + description = self.description + + status: None | str | Unset + if isinstance(self.status, Unset): + status = UNSET + elif isinstance(self.status, GiftStatus): + status = self.status.value + else: + status = self.status + + occasion: None | str | Unset + if isinstance(self.occasion, Unset): + occasion = UNSET + else: + occasion = self.occasion + + gift_date: None | str | Unset + if isinstance(self.gift_date, Unset): + gift_date = UNSET + elif isinstance(self.gift_date, datetime.date): + gift_date = self.gift_date.isoformat() + else: + gift_date = self.gift_date + + value_amount: float | None | Unset + if isinstance(self.value_amount, Unset): + value_amount = UNSET + else: + value_amount = self.value_amount + + value_currency: None | str | Unset + if isinstance(self.value_currency, Unset): + value_currency = UNSET + else: + value_currency = self.value_currency + + url: None | str | Unset + if isinstance(self.url, Unset): + url = UNSET + else: + url = self.url + + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({ + }) + if name is not UNSET: + field_dict["name"] = name + if description is not UNSET: + field_dict["description"] = description + if status is not UNSET: + field_dict["status"] = status + if occasion is not UNSET: + field_dict["occasion"] = occasion + if gift_date is not UNSET: + field_dict["gift_date"] = gift_date + if value_amount is not UNSET: + field_dict["value_amount"] = value_amount + if value_currency is not UNSET: + field_dict["value_currency"] = value_currency + if url is not UNSET: + field_dict["url"] = url + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + def _parse_name(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + name = _parse_name(d.pop("name", UNSET)) + + + def _parse_description(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + description = _parse_description(d.pop("description", UNSET)) + + + def _parse_status(data: object) -> GiftStatus | None | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + try: + if not isinstance(data, str): + raise TypeError() + status_type_0 = GiftStatus(data) + + + + return status_type_0 + except (TypeError, ValueError, AttributeError, KeyError): + pass + return cast(GiftStatus | None | Unset, data) + + status = _parse_status(d.pop("status", UNSET)) + + + def _parse_occasion(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + occasion = _parse_occasion(d.pop("occasion", UNSET)) + + + def _parse_gift_date(data: object) -> datetime.date | None | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + try: + if not isinstance(data, str): + raise TypeError() + gift_date_type_0 = isoparse(data).date() + + + + return gift_date_type_0 + except (TypeError, ValueError, AttributeError, KeyError): + pass + return cast(datetime.date | None | Unset, data) + + gift_date = _parse_gift_date(d.pop("gift_date", UNSET)) + + + def _parse_value_amount(data: object) -> float | None | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(float | None | Unset, data) + + value_amount = _parse_value_amount(d.pop("value_amount", UNSET)) + + + def _parse_value_currency(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + value_currency = _parse_value_currency(d.pop("value_currency", UNSET)) + + + def _parse_url(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + url = _parse_url(d.pop("url", UNSET)) + + + gift_update = cls( + name=name, + description=description, + status=status, + occasion=occasion, + gift_date=gift_date, + value_amount=value_amount, + value_currency=value_currency, + url=url, + ) + + + gift_update.additional_properties = d + return gift_update + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/kindred-sdk/personal_crm_client/models/gifts_public.py b/kindred-sdk/personal_crm_client/models/gifts_public.py new file mode 100644 index 00000000..18efc081 --- /dev/null +++ b/kindred-sdk/personal_crm_client/models/gifts_public.py @@ -0,0 +1,102 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +from typing import cast + +if TYPE_CHECKING: + from ..models.gift_public import GiftPublic + + + + + +T = TypeVar("T", bound="GiftsPublic") + + + +@_attrs_define +class GiftsPublic: + """ + Attributes: + data (list[GiftPublic]): + count (int): + """ + + data: list[GiftPublic] + count: int + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + from ..models.gift_public import GiftPublic + data = [] + for data_item_data in self.data: + data_item = data_item_data.to_dict() + data.append(data_item) + + + + count = self.count + + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({ + "data": data, + "count": count, + }) + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + from ..models.gift_public import GiftPublic + d = dict(src_dict) + data = [] + _data = d.pop("data") + for data_item_data in (_data): + data_item = GiftPublic.from_dict(data_item_data) + + + + data.append(data_item) + + + count = d.pop("count") + + gifts_public = cls( + data=data, + count=count, + ) + + + gifts_public.additional_properties = d + return gifts_public + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/kindred-sdk/personal_crm_client/models/group_create.py b/kindred-sdk/personal_crm_client/models/group_create.py new file mode 100644 index 00000000..f2a0021d --- /dev/null +++ b/kindred-sdk/personal_crm_client/models/group_create.py @@ -0,0 +1,99 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +from ..types import UNSET, Unset +from typing import cast + + + + + + +T = TypeVar("T", bound="GroupCreate") + + + +@_attrs_define +class GroupCreate: + """ + Attributes: + name (str): Group name, 1-255 chars. + description (None | str | Unset): Optional group description. + """ + + name: str + description: None | str | Unset = UNSET + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + name = self.name + + description: None | str | Unset + if isinstance(self.description, Unset): + description = UNSET + else: + description = self.description + + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({ + "name": name, + }) + if description is not UNSET: + field_dict["description"] = description + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + name = d.pop("name") + + def _parse_description(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + description = _parse_description(d.pop("description", UNSET)) + + + group_create = cls( + name=name, + description=description, + ) + + + group_create.additional_properties = d + return group_create + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/kindred-sdk/personal_crm_client/models/group_public.py b/kindred-sdk/personal_crm_client/models/group_public.py new file mode 100644 index 00000000..ee04c6e0 --- /dev/null +++ b/kindred-sdk/personal_crm_client/models/group_public.py @@ -0,0 +1,124 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +from ..types import UNSET, Unset +from dateutil.parser import isoparse +from typing import cast +from uuid import UUID +import datetime + + + + + + +T = TypeVar("T", bound="GroupPublic") + + + +@_attrs_define +class GroupPublic: + """ + Attributes: + name (str): Group name, 1-255 chars. + id (UUID): + created_at (datetime.datetime): + description (None | str | Unset): Optional group description. + """ + + name: str + id: UUID + created_at: datetime.datetime + description: None | str | Unset = UNSET + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + name = self.name + + id = str(self.id) + + created_at = self.created_at.isoformat() + + description: None | str | Unset + if isinstance(self.description, Unset): + description = UNSET + else: + description = self.description + + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({ + "name": name, + "id": id, + "created_at": created_at, + }) + if description is not UNSET: + field_dict["description"] = description + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + name = d.pop("name") + + id = UUID(d.pop("id")) + + + + + created_at = isoparse(d.pop("created_at")) + + + + + def _parse_description(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + description = _parse_description(d.pop("description", UNSET)) + + + group_public = cls( + name=name, + id=id, + created_at=created_at, + description=description, + ) + + + group_public.additional_properties = d + return group_public + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/kindred-sdk/personal_crm_client/models/group_update.py b/kindred-sdk/personal_crm_client/models/group_update.py new file mode 100644 index 00000000..1bb9bbf8 --- /dev/null +++ b/kindred-sdk/personal_crm_client/models/group_update.py @@ -0,0 +1,112 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +from ..types import UNSET, Unset +from typing import cast + + + + + + +T = TypeVar("T", bound="GroupUpdate") + + + +@_attrs_define +class GroupUpdate: + """ + Attributes: + name (None | str | Unset): + description (None | str | Unset): + """ + + name: None | str | Unset = UNSET + description: None | str | Unset = UNSET + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + name: None | str | Unset + if isinstance(self.name, Unset): + name = UNSET + else: + name = self.name + + description: None | str | Unset + if isinstance(self.description, Unset): + description = UNSET + else: + description = self.description + + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({ + }) + if name is not UNSET: + field_dict["name"] = name + if description is not UNSET: + field_dict["description"] = description + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + def _parse_name(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + name = _parse_name(d.pop("name", UNSET)) + + + def _parse_description(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + description = _parse_description(d.pop("description", UNSET)) + + + group_update = cls( + name=name, + description=description, + ) + + + group_update.additional_properties = d + return group_update + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/kindred-sdk/personal_crm_client/models/groups_public.py b/kindred-sdk/personal_crm_client/models/groups_public.py new file mode 100644 index 00000000..01e0f158 --- /dev/null +++ b/kindred-sdk/personal_crm_client/models/groups_public.py @@ -0,0 +1,102 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +from typing import cast + +if TYPE_CHECKING: + from ..models.group_public import GroupPublic + + + + + +T = TypeVar("T", bound="GroupsPublic") + + + +@_attrs_define +class GroupsPublic: + """ + Attributes: + data (list[GroupPublic]): + count (int): + """ + + data: list[GroupPublic] + count: int + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + from ..models.group_public import GroupPublic + data = [] + for data_item_data in self.data: + data_item = data_item_data.to_dict() + data.append(data_item) + + + + count = self.count + + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({ + "data": data, + "count": count, + }) + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + from ..models.group_public import GroupPublic + d = dict(src_dict) + data = [] + _data = d.pop("data") + for data_item_data in (_data): + data_item = GroupPublic.from_dict(data_item_data) + + + + data.append(data_item) + + + count = d.pop("count") + + groups_public = cls( + data=data, + count=count, + ) + + + groups_public.additional_properties = d + return groups_public + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/kindred-sdk/personal_crm_client/models/http_validation_error.py b/kindred-sdk/personal_crm_client/models/http_validation_error.py new file mode 100644 index 00000000..d5231c64 --- /dev/null +++ b/kindred-sdk/personal_crm_client/models/http_validation_error.py @@ -0,0 +1,100 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +from ..types import UNSET, Unset +from typing import cast + +if TYPE_CHECKING: + from ..models.validation_error import ValidationError + + + + + +T = TypeVar("T", bound="HTTPValidationError") + + + +@_attrs_define +class HTTPValidationError: + """ + Attributes: + detail (list[ValidationError] | Unset): + """ + + detail: list[ValidationError] | Unset = UNSET + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + from ..models.validation_error import ValidationError + detail: list[dict[str, Any]] | Unset = UNSET + if not isinstance(self.detail, Unset): + detail = [] + for detail_item_data in self.detail: + detail_item = detail_item_data.to_dict() + detail.append(detail_item) + + + + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({ + }) + if detail is not UNSET: + field_dict["detail"] = detail + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + from ..models.validation_error import ValidationError + d = dict(src_dict) + _detail = d.pop("detail", UNSET) + detail: list[ValidationError] | Unset = UNSET + if _detail is not UNSET: + detail = [] + for detail_item_data in _detail: + detail_item = ValidationError.from_dict(detail_item_data) + + + + detail.append(detail_item) + + + http_validation_error = cls( + detail=detail, + ) + + + http_validation_error.additional_properties = d + return http_validation_error + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/kindred-sdk/personal_crm_client/models/interaction_attendee_summary.py b/kindred-sdk/personal_crm_client/models/interaction_attendee_summary.py new file mode 100644 index 00000000..6295fa7b --- /dev/null +++ b/kindred-sdk/personal_crm_client/models/interaction_attendee_summary.py @@ -0,0 +1,132 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +from ..types import UNSET, Unset +from typing import cast +from uuid import UUID + + + + + + +T = TypeVar("T", bound="InteractionAttendeeSummary") + + + +@_attrs_define +class InteractionAttendeeSummary: + """ + Attributes: + id (UUID): + first_name (str): + last_name (None | str | Unset): + avatar_url (None | str | Unset): + """ + + id: UUID + first_name: str + last_name: None | str | Unset = UNSET + avatar_url: None | str | Unset = UNSET + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + id = str(self.id) + + first_name = self.first_name + + last_name: None | str | Unset + if isinstance(self.last_name, Unset): + last_name = UNSET + else: + last_name = self.last_name + + avatar_url: None | str | Unset + if isinstance(self.avatar_url, Unset): + avatar_url = UNSET + else: + avatar_url = self.avatar_url + + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({ + "id": id, + "first_name": first_name, + }) + if last_name is not UNSET: + field_dict["last_name"] = last_name + if avatar_url is not UNSET: + field_dict["avatar_url"] = avatar_url + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + id = UUID(d.pop("id")) + + + + + first_name = d.pop("first_name") + + def _parse_last_name(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + last_name = _parse_last_name(d.pop("last_name", UNSET)) + + + def _parse_avatar_url(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + avatar_url = _parse_avatar_url(d.pop("avatar_url", UNSET)) + + + interaction_attendee_summary = cls( + id=id, + first_name=first_name, + last_name=last_name, + avatar_url=avatar_url, + ) + + + interaction_attendee_summary.additional_properties = d + return interaction_attendee_summary + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/kindred-sdk/personal_crm_client/models/interaction_channel.py b/kindred-sdk/personal_crm_client/models/interaction_channel.py new file mode 100644 index 00000000..ca690898 --- /dev/null +++ b/kindred-sdk/personal_crm_client/models/interaction_channel.py @@ -0,0 +1,13 @@ +from enum import Enum + +class InteractionChannel(str, Enum): + CALL = "call" + EMAIL = "email" + IN_PERSON = "in_person" + OTHER = "other" + SOCIAL = "social" + TEXT = "text" + VIDEO = "video" + + def __str__(self) -> str: + return str(self.value) diff --git a/kindred-sdk/personal_crm_client/models/interaction_create.py b/kindred-sdk/personal_crm_client/models/interaction_create.py new file mode 100644 index 00000000..36301899 --- /dev/null +++ b/kindred-sdk/personal_crm_client/models/interaction_create.py @@ -0,0 +1,180 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +from ..models.interaction_channel import InteractionChannel +from ..types import UNSET, Unset +from dateutil.parser import isoparse +from typing import cast +from uuid import UUID +import datetime + + + + + + +T = TypeVar("T", bound="InteractionCreate") + + + +@_attrs_define +class InteractionCreate: + """ + Attributes: + channel (InteractionChannel): + occurred_at (datetime.datetime): When the interaction actually took place. + attendee_ids (list[UUID]): Contacts that attended; must have at least one. + notes (None | str | Unset): Conversation summary, action items, etc. + mood (None | str | Unset): Emoji or keyword capturing the tone. + duration_minutes (int | None | Unset): Length of the interaction in minutes. + """ + + channel: InteractionChannel + occurred_at: datetime.datetime + attendee_ids: list[UUID] + notes: None | str | Unset = UNSET + mood: None | str | Unset = UNSET + duration_minutes: int | None | Unset = UNSET + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + channel = self.channel.value + + occurred_at = self.occurred_at.isoformat() + + attendee_ids = [] + for attendee_ids_item_data in self.attendee_ids: + attendee_ids_item = str(attendee_ids_item_data) + attendee_ids.append(attendee_ids_item) + + + + notes: None | str | Unset + if isinstance(self.notes, Unset): + notes = UNSET + else: + notes = self.notes + + mood: None | str | Unset + if isinstance(self.mood, Unset): + mood = UNSET + else: + mood = self.mood + + duration_minutes: int | None | Unset + if isinstance(self.duration_minutes, Unset): + duration_minutes = UNSET + else: + duration_minutes = self.duration_minutes + + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({ + "channel": channel, + "occurred_at": occurred_at, + "attendee_ids": attendee_ids, + }) + if notes is not UNSET: + field_dict["notes"] = notes + if mood is not UNSET: + field_dict["mood"] = mood + if duration_minutes is not UNSET: + field_dict["duration_minutes"] = duration_minutes + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + channel = InteractionChannel(d.pop("channel")) + + + + + occurred_at = isoparse(d.pop("occurred_at")) + + + + + attendee_ids = [] + _attendee_ids = d.pop("attendee_ids") + for attendee_ids_item_data in (_attendee_ids): + attendee_ids_item = UUID(attendee_ids_item_data) + + + + attendee_ids.append(attendee_ids_item) + + + def _parse_notes(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + notes = _parse_notes(d.pop("notes", UNSET)) + + + def _parse_mood(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + mood = _parse_mood(d.pop("mood", UNSET)) + + + def _parse_duration_minutes(data: object) -> int | None | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(int | None | Unset, data) + + duration_minutes = _parse_duration_minutes(d.pop("duration_minutes", UNSET)) + + + interaction_create = cls( + channel=channel, + occurred_at=occurred_at, + attendee_ids=attendee_ids, + notes=notes, + mood=mood, + duration_minutes=duration_minutes, + ) + + + interaction_create.additional_properties = d + return interaction_create + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/kindred-sdk/personal_crm_client/models/interaction_public.py b/kindred-sdk/personal_crm_client/models/interaction_public.py new file mode 100644 index 00000000..5a7e2856 --- /dev/null +++ b/kindred-sdk/personal_crm_client/models/interaction_public.py @@ -0,0 +1,211 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +from ..models.interaction_channel import InteractionChannel +from ..types import UNSET, Unset +from dateutil.parser import isoparse +from typing import cast +from uuid import UUID +import datetime + +if TYPE_CHECKING: + from ..models.interaction_attendee_summary import InteractionAttendeeSummary + + + + + +T = TypeVar("T", bound="InteractionPublic") + + + +@_attrs_define +class InteractionPublic: + """ + Attributes: + channel (InteractionChannel): + occurred_at (datetime.datetime): When the interaction actually took place. + id (UUID): + created_at (datetime.datetime): + notes (None | str | Unset): Conversation summary, action items, etc. + mood (None | str | Unset): Emoji or keyword capturing the tone. + duration_minutes (int | None | Unset): Length of the interaction in minutes. + attendees (list[InteractionAttendeeSummary] | Unset): + """ + + channel: InteractionChannel + occurred_at: datetime.datetime + id: UUID + created_at: datetime.datetime + notes: None | str | Unset = UNSET + mood: None | str | Unset = UNSET + duration_minutes: int | None | Unset = UNSET + attendees: list[InteractionAttendeeSummary] | Unset = UNSET + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + from ..models.interaction_attendee_summary import InteractionAttendeeSummary + channel = self.channel.value + + occurred_at = self.occurred_at.isoformat() + + id = str(self.id) + + created_at = self.created_at.isoformat() + + notes: None | str | Unset + if isinstance(self.notes, Unset): + notes = UNSET + else: + notes = self.notes + + mood: None | str | Unset + if isinstance(self.mood, Unset): + mood = UNSET + else: + mood = self.mood + + duration_minutes: int | None | Unset + if isinstance(self.duration_minutes, Unset): + duration_minutes = UNSET + else: + duration_minutes = self.duration_minutes + + attendees: list[dict[str, Any]] | Unset = UNSET + if not isinstance(self.attendees, Unset): + attendees = [] + for attendees_item_data in self.attendees: + attendees_item = attendees_item_data.to_dict() + attendees.append(attendees_item) + + + + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({ + "channel": channel, + "occurred_at": occurred_at, + "id": id, + "created_at": created_at, + }) + if notes is not UNSET: + field_dict["notes"] = notes + if mood is not UNSET: + field_dict["mood"] = mood + if duration_minutes is not UNSET: + field_dict["duration_minutes"] = duration_minutes + if attendees is not UNSET: + field_dict["attendees"] = attendees + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + from ..models.interaction_attendee_summary import InteractionAttendeeSummary + d = dict(src_dict) + channel = InteractionChannel(d.pop("channel")) + + + + + occurred_at = isoparse(d.pop("occurred_at")) + + + + + id = UUID(d.pop("id")) + + + + + created_at = isoparse(d.pop("created_at")) + + + + + def _parse_notes(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + notes = _parse_notes(d.pop("notes", UNSET)) + + + def _parse_mood(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + mood = _parse_mood(d.pop("mood", UNSET)) + + + def _parse_duration_minutes(data: object) -> int | None | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(int | None | Unset, data) + + duration_minutes = _parse_duration_minutes(d.pop("duration_minutes", UNSET)) + + + _attendees = d.pop("attendees", UNSET) + attendees: list[InteractionAttendeeSummary] | Unset = UNSET + if _attendees is not UNSET: + attendees = [] + for attendees_item_data in _attendees: + attendees_item = InteractionAttendeeSummary.from_dict(attendees_item_data) + + + + attendees.append(attendees_item) + + + interaction_public = cls( + channel=channel, + occurred_at=occurred_at, + id=id, + created_at=created_at, + notes=notes, + mood=mood, + duration_minutes=duration_minutes, + attendees=attendees, + ) + + + interaction_public.additional_properties = d + return interaction_public + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/kindred-sdk/personal_crm_client/models/interaction_update.py b/kindred-sdk/personal_crm_client/models/interaction_update.py new file mode 100644 index 00000000..0370e27f --- /dev/null +++ b/kindred-sdk/personal_crm_client/models/interaction_update.py @@ -0,0 +1,246 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +from ..models.interaction_channel import InteractionChannel +from ..types import UNSET, Unset +from dateutil.parser import isoparse +from typing import cast +from uuid import UUID +import datetime + + + + + + +T = TypeVar("T", bound="InteractionUpdate") + + + +@_attrs_define +class InteractionUpdate: + """ + Attributes: + channel (InteractionChannel | None | Unset): + occurred_at (datetime.datetime | None | Unset): + notes (None | str | Unset): + mood (None | str | Unset): + duration_minutes (int | None | Unset): + attendee_ids (list[UUID] | None | Unset): Replace the attendee set; must have at least one if provided. + """ + + channel: InteractionChannel | None | Unset = UNSET + occurred_at: datetime.datetime | None | Unset = UNSET + notes: None | str | Unset = UNSET + mood: None | str | Unset = UNSET + duration_minutes: int | None | Unset = UNSET + attendee_ids: list[UUID] | None | Unset = UNSET + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + channel: None | str | Unset + if isinstance(self.channel, Unset): + channel = UNSET + elif isinstance(self.channel, InteractionChannel): + channel = self.channel.value + else: + channel = self.channel + + occurred_at: None | str | Unset + if isinstance(self.occurred_at, Unset): + occurred_at = UNSET + elif isinstance(self.occurred_at, datetime.datetime): + occurred_at = self.occurred_at.isoformat() + else: + occurred_at = self.occurred_at + + notes: None | str | Unset + if isinstance(self.notes, Unset): + notes = UNSET + else: + notes = self.notes + + mood: None | str | Unset + if isinstance(self.mood, Unset): + mood = UNSET + else: + mood = self.mood + + duration_minutes: int | None | Unset + if isinstance(self.duration_minutes, Unset): + duration_minutes = UNSET + else: + duration_minutes = self.duration_minutes + + attendee_ids: list[str] | None | Unset + if isinstance(self.attendee_ids, Unset): + attendee_ids = UNSET + elif isinstance(self.attendee_ids, list): + attendee_ids = [] + for attendee_ids_type_0_item_data in self.attendee_ids: + attendee_ids_type_0_item = str(attendee_ids_type_0_item_data) + attendee_ids.append(attendee_ids_type_0_item) + + + else: + attendee_ids = self.attendee_ids + + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({ + }) + if channel is not UNSET: + field_dict["channel"] = channel + if occurred_at is not UNSET: + field_dict["occurred_at"] = occurred_at + if notes is not UNSET: + field_dict["notes"] = notes + if mood is not UNSET: + field_dict["mood"] = mood + if duration_minutes is not UNSET: + field_dict["duration_minutes"] = duration_minutes + if attendee_ids is not UNSET: + field_dict["attendee_ids"] = attendee_ids + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + def _parse_channel(data: object) -> InteractionChannel | None | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + try: + if not isinstance(data, str): + raise TypeError() + channel_type_0 = InteractionChannel(data) + + + + return channel_type_0 + except (TypeError, ValueError, AttributeError, KeyError): + pass + return cast(InteractionChannel | None | Unset, data) + + channel = _parse_channel(d.pop("channel", UNSET)) + + + def _parse_occurred_at(data: object) -> datetime.datetime | None | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + try: + if not isinstance(data, str): + raise TypeError() + occurred_at_type_0 = isoparse(data) + + + + return occurred_at_type_0 + except (TypeError, ValueError, AttributeError, KeyError): + pass + return cast(datetime.datetime | None | Unset, data) + + occurred_at = _parse_occurred_at(d.pop("occurred_at", UNSET)) + + + def _parse_notes(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + notes = _parse_notes(d.pop("notes", UNSET)) + + + def _parse_mood(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + mood = _parse_mood(d.pop("mood", UNSET)) + + + def _parse_duration_minutes(data: object) -> int | None | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(int | None | Unset, data) + + duration_minutes = _parse_duration_minutes(d.pop("duration_minutes", UNSET)) + + + def _parse_attendee_ids(data: object) -> list[UUID] | None | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + try: + if not isinstance(data, list): + raise TypeError() + attendee_ids_type_0 = [] + _attendee_ids_type_0 = data + for attendee_ids_type_0_item_data in (_attendee_ids_type_0): + attendee_ids_type_0_item = UUID(attendee_ids_type_0_item_data) + + + + attendee_ids_type_0.append(attendee_ids_type_0_item) + + return attendee_ids_type_0 + except (TypeError, ValueError, AttributeError, KeyError): + pass + return cast(list[UUID] | None | Unset, data) + + attendee_ids = _parse_attendee_ids(d.pop("attendee_ids", UNSET)) + + + interaction_update = cls( + channel=channel, + occurred_at=occurred_at, + notes=notes, + mood=mood, + duration_minutes=duration_minutes, + attendee_ids=attendee_ids, + ) + + + interaction_update.additional_properties = d + return interaction_update + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/kindred-sdk/personal_crm_client/models/interactions_public.py b/kindred-sdk/personal_crm_client/models/interactions_public.py new file mode 100644 index 00000000..bc9d4abc --- /dev/null +++ b/kindred-sdk/personal_crm_client/models/interactions_public.py @@ -0,0 +1,102 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +from typing import cast + +if TYPE_CHECKING: + from ..models.interaction_public import InteractionPublic + + + + + +T = TypeVar("T", bound="InteractionsPublic") + + + +@_attrs_define +class InteractionsPublic: + """ + Attributes: + data (list[InteractionPublic]): + count (int): + """ + + data: list[InteractionPublic] + count: int + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + from ..models.interaction_public import InteractionPublic + data = [] + for data_item_data in self.data: + data_item = data_item_data.to_dict() + data.append(data_item) + + + + count = self.count + + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({ + "data": data, + "count": count, + }) + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + from ..models.interaction_public import InteractionPublic + d = dict(src_dict) + data = [] + _data = d.pop("data") + for data_item_data in (_data): + data_item = InteractionPublic.from_dict(data_item_data) + + + + data.append(data_item) + + + count = d.pop("count") + + interactions_public = cls( + data=data, + count=count, + ) + + + interactions_public.additional_properties = d + return interactions_public + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/kindred-sdk/personal_crm_client/models/journal_entries_public.py b/kindred-sdk/personal_crm_client/models/journal_entries_public.py new file mode 100644 index 00000000..11a9459c --- /dev/null +++ b/kindred-sdk/personal_crm_client/models/journal_entries_public.py @@ -0,0 +1,102 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +from typing import cast + +if TYPE_CHECKING: + from ..models.journal_entry_public import JournalEntryPublic + + + + + +T = TypeVar("T", bound="JournalEntriesPublic") + + + +@_attrs_define +class JournalEntriesPublic: + """ + Attributes: + data (list[JournalEntryPublic]): + count (int): + """ + + data: list[JournalEntryPublic] + count: int + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + from ..models.journal_entry_public import JournalEntryPublic + data = [] + for data_item_data in self.data: + data_item = data_item_data.to_dict() + data.append(data_item) + + + + count = self.count + + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({ + "data": data, + "count": count, + }) + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + from ..models.journal_entry_public import JournalEntryPublic + d = dict(src_dict) + data = [] + _data = d.pop("data") + for data_item_data in (_data): + data_item = JournalEntryPublic.from_dict(data_item_data) + + + + data.append(data_item) + + + count = d.pop("count") + + journal_entries_public = cls( + data=data, + count=count, + ) + + + journal_entries_public.additional_properties = d + return journal_entries_public + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/kindred-sdk/personal_crm_client/models/journal_entry_create.py b/kindred-sdk/personal_crm_client/models/journal_entry_create.py new file mode 100644 index 00000000..12c5c74e --- /dev/null +++ b/kindred-sdk/personal_crm_client/models/journal_entry_create.py @@ -0,0 +1,112 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +from ..types import UNSET, Unset +from dateutil.parser import isoparse +from typing import cast +import datetime + + + + + + +T = TypeVar("T", bound="JournalEntryCreate") + + + +@_attrs_define +class JournalEntryCreate: + """ + Attributes: + body (str): Entry body, 1-50000 chars. + entry_date (datetime.date): Date the entry is about (may differ from created_at). + mood (None | str | Unset): Emoji or keyword capturing the mood. + """ + + body: str + entry_date: datetime.date + mood: None | str | Unset = UNSET + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + body = self.body + + entry_date = self.entry_date.isoformat() + + mood: None | str | Unset + if isinstance(self.mood, Unset): + mood = UNSET + else: + mood = self.mood + + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({ + "body": body, + "entry_date": entry_date, + }) + if mood is not UNSET: + field_dict["mood"] = mood + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + body = d.pop("body") + + entry_date = isoparse(d.pop("entry_date")).date() + + + + + def _parse_mood(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + mood = _parse_mood(d.pop("mood", UNSET)) + + + journal_entry_create = cls( + body=body, + entry_date=entry_date, + mood=mood, + ) + + + journal_entry_create.additional_properties = d + return journal_entry_create + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/kindred-sdk/personal_crm_client/models/journal_entry_public.py b/kindred-sdk/personal_crm_client/models/journal_entry_public.py new file mode 100644 index 00000000..8b10fc90 --- /dev/null +++ b/kindred-sdk/personal_crm_client/models/journal_entry_public.py @@ -0,0 +1,146 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +from ..types import UNSET, Unset +from dateutil.parser import isoparse +from typing import cast +from uuid import UUID +import datetime + + + + + + +T = TypeVar("T", bound="JournalEntryPublic") + + + +@_attrs_define +class JournalEntryPublic: + """ + Attributes: + body (str): Entry body, 1-50000 chars. + entry_date (datetime.date): Date the entry is about (may differ from created_at). + id (UUID): + created_at (datetime.datetime): + updated_at (datetime.datetime): + mood (None | str | Unset): Emoji or keyword capturing the mood. + """ + + body: str + entry_date: datetime.date + id: UUID + created_at: datetime.datetime + updated_at: datetime.datetime + mood: None | str | Unset = UNSET + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + body = self.body + + entry_date = self.entry_date.isoformat() + + id = str(self.id) + + created_at = self.created_at.isoformat() + + updated_at = self.updated_at.isoformat() + + mood: None | str | Unset + if isinstance(self.mood, Unset): + mood = UNSET + else: + mood = self.mood + + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({ + "body": body, + "entry_date": entry_date, + "id": id, + "created_at": created_at, + "updated_at": updated_at, + }) + if mood is not UNSET: + field_dict["mood"] = mood + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + body = d.pop("body") + + entry_date = isoparse(d.pop("entry_date")).date() + + + + + id = UUID(d.pop("id")) + + + + + created_at = isoparse(d.pop("created_at")) + + + + + updated_at = isoparse(d.pop("updated_at")) + + + + + def _parse_mood(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + mood = _parse_mood(d.pop("mood", UNSET)) + + + journal_entry_public = cls( + body=body, + entry_date=entry_date, + id=id, + created_at=created_at, + updated_at=updated_at, + mood=mood, + ) + + + journal_entry_public.additional_properties = d + return journal_entry_public + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/kindred-sdk/personal_crm_client/models/journal_entry_update.py b/kindred-sdk/personal_crm_client/models/journal_entry_update.py new file mode 100644 index 00000000..455c4473 --- /dev/null +++ b/kindred-sdk/personal_crm_client/models/journal_entry_update.py @@ -0,0 +1,147 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +from ..types import UNSET, Unset +from dateutil.parser import isoparse +from typing import cast +import datetime + + + + + + +T = TypeVar("T", bound="JournalEntryUpdate") + + + +@_attrs_define +class JournalEntryUpdate: + """ + Attributes: + body (None | str | Unset): + mood (None | str | Unset): + entry_date (datetime.date | None | Unset): + """ + + body: None | str | Unset = UNSET + mood: None | str | Unset = UNSET + entry_date: datetime.date | None | Unset = UNSET + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + body: None | str | Unset + if isinstance(self.body, Unset): + body = UNSET + else: + body = self.body + + mood: None | str | Unset + if isinstance(self.mood, Unset): + mood = UNSET + else: + mood = self.mood + + entry_date: None | str | Unset + if isinstance(self.entry_date, Unset): + entry_date = UNSET + elif isinstance(self.entry_date, datetime.date): + entry_date = self.entry_date.isoformat() + else: + entry_date = self.entry_date + + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({ + }) + if body is not UNSET: + field_dict["body"] = body + if mood is not UNSET: + field_dict["mood"] = mood + if entry_date is not UNSET: + field_dict["entry_date"] = entry_date + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + def _parse_body(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + body = _parse_body(d.pop("body", UNSET)) + + + def _parse_mood(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + mood = _parse_mood(d.pop("mood", UNSET)) + + + def _parse_entry_date(data: object) -> datetime.date | None | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + try: + if not isinstance(data, str): + raise TypeError() + entry_date_type_0 = isoparse(data).date() + + + + return entry_date_type_0 + except (TypeError, ValueError, AttributeError, KeyError): + pass + return cast(datetime.date | None | Unset, data) + + entry_date = _parse_entry_date(d.pop("entry_date", UNSET)) + + + journal_entry_update = cls( + body=body, + mood=mood, + entry_date=entry_date, + ) + + + journal_entry_update.additional_properties = d + return journal_entry_update + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/kindred-sdk/personal_crm_client/models/life_event_create.py b/kindred-sdk/personal_crm_client/models/life_event_create.py new file mode 100644 index 00000000..b0894c5c --- /dev/null +++ b/kindred-sdk/personal_crm_client/models/life_event_create.py @@ -0,0 +1,142 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +from ..types import UNSET, Unset +from dateutil.parser import isoparse +from typing import cast +from uuid import UUID +import datetime + + + + + + +T = TypeVar("T", bound="LifeEventCreate") + + + +@_attrs_define +class LifeEventCreate: + """ + Attributes: + event_type (str): Kind of milestone: job_change, move, wedding, baby, graduation, birthday, anniversary, etc. + title (str): Event title. + occurred_at (datetime.date): Date the event happened. + contact_id (UUID): + description (None | str | Unset): Extra details about the event. + create_annual_reminder (bool | Unset): If true, auto-create a yearly recurring reminder on this date. Default: + False. + """ + + event_type: str + title: str + occurred_at: datetime.date + contact_id: UUID + description: None | str | Unset = UNSET + create_annual_reminder: bool | Unset = False + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + event_type = self.event_type + + title = self.title + + occurred_at = self.occurred_at.isoformat() + + contact_id = str(self.contact_id) + + description: None | str | Unset + if isinstance(self.description, Unset): + description = UNSET + else: + description = self.description + + create_annual_reminder = self.create_annual_reminder + + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({ + "event_type": event_type, + "title": title, + "occurred_at": occurred_at, + "contact_id": contact_id, + }) + if description is not UNSET: + field_dict["description"] = description + if create_annual_reminder is not UNSET: + field_dict["create_annual_reminder"] = create_annual_reminder + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + event_type = d.pop("event_type") + + title = d.pop("title") + + occurred_at = isoparse(d.pop("occurred_at")).date() + + + + + contact_id = UUID(d.pop("contact_id")) + + + + + def _parse_description(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + description = _parse_description(d.pop("description", UNSET)) + + + create_annual_reminder = d.pop("create_annual_reminder", UNSET) + + life_event_create = cls( + event_type=event_type, + title=title, + occurred_at=occurred_at, + contact_id=contact_id, + description=description, + create_annual_reminder=create_annual_reminder, + ) + + + life_event_create.additional_properties = d + return life_event_create + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/kindred-sdk/personal_crm_client/models/life_event_public.py b/kindred-sdk/personal_crm_client/models/life_event_public.py new file mode 100644 index 00000000..18b0b173 --- /dev/null +++ b/kindred-sdk/personal_crm_client/models/life_event_public.py @@ -0,0 +1,164 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +from ..types import UNSET, Unset +from dateutil.parser import isoparse +from typing import cast +from uuid import UUID +import datetime + + + + + + +T = TypeVar("T", bound="LifeEventPublic") + + + +@_attrs_define +class LifeEventPublic: + """ + Attributes: + event_type (str): Kind of milestone: job_change, move, wedding, baby, graduation, birthday, anniversary, etc. + title (str): Event title. + occurred_at (datetime.date): Date the event happened. + id (UUID): + contact_id (UUID): + created_at (datetime.datetime): + description (None | str | Unset): Extra details about the event. + create_annual_reminder (bool | Unset): If true, auto-create a yearly recurring reminder on this date. Default: + False. + """ + + event_type: str + title: str + occurred_at: datetime.date + id: UUID + contact_id: UUID + created_at: datetime.datetime + description: None | str | Unset = UNSET + create_annual_reminder: bool | Unset = False + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + event_type = self.event_type + + title = self.title + + occurred_at = self.occurred_at.isoformat() + + id = str(self.id) + + contact_id = str(self.contact_id) + + created_at = self.created_at.isoformat() + + description: None | str | Unset + if isinstance(self.description, Unset): + description = UNSET + else: + description = self.description + + create_annual_reminder = self.create_annual_reminder + + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({ + "event_type": event_type, + "title": title, + "occurred_at": occurred_at, + "id": id, + "contact_id": contact_id, + "created_at": created_at, + }) + if description is not UNSET: + field_dict["description"] = description + if create_annual_reminder is not UNSET: + field_dict["create_annual_reminder"] = create_annual_reminder + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + event_type = d.pop("event_type") + + title = d.pop("title") + + occurred_at = isoparse(d.pop("occurred_at")).date() + + + + + id = UUID(d.pop("id")) + + + + + contact_id = UUID(d.pop("contact_id")) + + + + + created_at = isoparse(d.pop("created_at")) + + + + + def _parse_description(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + description = _parse_description(d.pop("description", UNSET)) + + + create_annual_reminder = d.pop("create_annual_reminder", UNSET) + + life_event_public = cls( + event_type=event_type, + title=title, + occurred_at=occurred_at, + id=id, + contact_id=contact_id, + created_at=created_at, + description=description, + create_annual_reminder=create_annual_reminder, + ) + + + life_event_public.additional_properties = d + return life_event_public + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/kindred-sdk/personal_crm_client/models/life_event_update.py b/kindred-sdk/personal_crm_client/models/life_event_update.py new file mode 100644 index 00000000..dd5299f6 --- /dev/null +++ b/kindred-sdk/personal_crm_client/models/life_event_update.py @@ -0,0 +1,189 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +from ..types import UNSET, Unset +from dateutil.parser import isoparse +from typing import cast +import datetime + + + + + + +T = TypeVar("T", bound="LifeEventUpdate") + + + +@_attrs_define +class LifeEventUpdate: + """ + Attributes: + event_type (None | str | Unset): + title (None | str | Unset): + description (None | str | Unset): + occurred_at (datetime.date | None | Unset): + create_annual_reminder (bool | None | Unset): + """ + + event_type: None | str | Unset = UNSET + title: None | str | Unset = UNSET + description: None | str | Unset = UNSET + occurred_at: datetime.date | None | Unset = UNSET + create_annual_reminder: bool | None | Unset = UNSET + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + event_type: None | str | Unset + if isinstance(self.event_type, Unset): + event_type = UNSET + else: + event_type = self.event_type + + title: None | str | Unset + if isinstance(self.title, Unset): + title = UNSET + else: + title = self.title + + description: None | str | Unset + if isinstance(self.description, Unset): + description = UNSET + else: + description = self.description + + occurred_at: None | str | Unset + if isinstance(self.occurred_at, Unset): + occurred_at = UNSET + elif isinstance(self.occurred_at, datetime.date): + occurred_at = self.occurred_at.isoformat() + else: + occurred_at = self.occurred_at + + create_annual_reminder: bool | None | Unset + if isinstance(self.create_annual_reminder, Unset): + create_annual_reminder = UNSET + else: + create_annual_reminder = self.create_annual_reminder + + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({ + }) + if event_type is not UNSET: + field_dict["event_type"] = event_type + if title is not UNSET: + field_dict["title"] = title + if description is not UNSET: + field_dict["description"] = description + if occurred_at is not UNSET: + field_dict["occurred_at"] = occurred_at + if create_annual_reminder is not UNSET: + field_dict["create_annual_reminder"] = create_annual_reminder + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + def _parse_event_type(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + event_type = _parse_event_type(d.pop("event_type", UNSET)) + + + def _parse_title(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + title = _parse_title(d.pop("title", UNSET)) + + + def _parse_description(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + description = _parse_description(d.pop("description", UNSET)) + + + def _parse_occurred_at(data: object) -> datetime.date | None | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + try: + if not isinstance(data, str): + raise TypeError() + occurred_at_type_0 = isoparse(data).date() + + + + return occurred_at_type_0 + except (TypeError, ValueError, AttributeError, KeyError): + pass + return cast(datetime.date | None | Unset, data) + + occurred_at = _parse_occurred_at(d.pop("occurred_at", UNSET)) + + + def _parse_create_annual_reminder(data: object) -> bool | None | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(bool | None | Unset, data) + + create_annual_reminder = _parse_create_annual_reminder(d.pop("create_annual_reminder", UNSET)) + + + life_event_update = cls( + event_type=event_type, + title=title, + description=description, + occurred_at=occurred_at, + create_annual_reminder=create_annual_reminder, + ) + + + life_event_update.additional_properties = d + return life_event_update + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/kindred-sdk/personal_crm_client/models/life_events_public.py b/kindred-sdk/personal_crm_client/models/life_events_public.py new file mode 100644 index 00000000..79b9c6b4 --- /dev/null +++ b/kindred-sdk/personal_crm_client/models/life_events_public.py @@ -0,0 +1,102 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +from typing import cast + +if TYPE_CHECKING: + from ..models.life_event_public import LifeEventPublic + + + + + +T = TypeVar("T", bound="LifeEventsPublic") + + + +@_attrs_define +class LifeEventsPublic: + """ + Attributes: + data (list[LifeEventPublic]): + count (int): + """ + + data: list[LifeEventPublic] + count: int + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + from ..models.life_event_public import LifeEventPublic + data = [] + for data_item_data in self.data: + data_item = data_item_data.to_dict() + data.append(data_item) + + + + count = self.count + + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({ + "data": data, + "count": count, + }) + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + from ..models.life_event_public import LifeEventPublic + d = dict(src_dict) + data = [] + _data = d.pop("data") + for data_item_data in (_data): + data_item = LifeEventPublic.from_dict(data_item_data) + + + + data.append(data_item) + + + count = d.pop("count") + + life_events_public = cls( + data=data, + count=count, + ) + + + life_events_public.additional_properties = d + return life_events_public + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/kindred-sdk/personal_crm_client/models/media_category.py b/kindred-sdk/personal_crm_client/models/media_category.py new file mode 100644 index 00000000..87e7fcbf --- /dev/null +++ b/kindred-sdk/personal_crm_client/models/media_category.py @@ -0,0 +1,12 @@ +from enum import Enum + +class MediaCategory(str, Enum): + BOOK = "book" + MOVIE = "movie" + MUSICIAN = "musician" + OTHER = "other" + PODCAST = "podcast" + TV_SHOW = "tv_show" + + def __str__(self) -> str: + return str(self.value) diff --git a/kindred-sdk/personal_crm_client/models/media_recommendation_create.py b/kindred-sdk/personal_crm_client/models/media_recommendation_create.py new file mode 100644 index 00000000..b1a794f6 --- /dev/null +++ b/kindred-sdk/personal_crm_client/models/media_recommendation_create.py @@ -0,0 +1,179 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +from ..models.media_category import MediaCategory +from ..types import UNSET, Unset +from dateutil.parser import isoparse +from typing import cast +from uuid import UUID +import datetime + + + + + + +T = TypeVar("T", bound="MediaRecommendationCreate") + + + +@_attrs_define +class MediaRecommendationCreate: + """ + Attributes: + category (MediaCategory): + title (str): Title of the work. + contact_id (UUID): + creator (None | str | Unset): Author, director, artist, or similar creator. + note (None | str | Unset): Why it was recommended or personal reaction. + recommended_at (datetime.date | None | Unset): Date the recommendation was made. + """ + + category: MediaCategory + title: str + contact_id: UUID + creator: None | str | Unset = UNSET + note: None | str | Unset = UNSET + recommended_at: datetime.date | None | Unset = UNSET + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + category = self.category.value + + title = self.title + + contact_id = str(self.contact_id) + + creator: None | str | Unset + if isinstance(self.creator, Unset): + creator = UNSET + else: + creator = self.creator + + note: None | str | Unset + if isinstance(self.note, Unset): + note = UNSET + else: + note = self.note + + recommended_at: None | str | Unset + if isinstance(self.recommended_at, Unset): + recommended_at = UNSET + elif isinstance(self.recommended_at, datetime.date): + recommended_at = self.recommended_at.isoformat() + else: + recommended_at = self.recommended_at + + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({ + "category": category, + "title": title, + "contact_id": contact_id, + }) + if creator is not UNSET: + field_dict["creator"] = creator + if note is not UNSET: + field_dict["note"] = note + if recommended_at is not UNSET: + field_dict["recommended_at"] = recommended_at + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + category = MediaCategory(d.pop("category")) + + + + + title = d.pop("title") + + contact_id = UUID(d.pop("contact_id")) + + + + + def _parse_creator(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + creator = _parse_creator(d.pop("creator", UNSET)) + + + def _parse_note(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + note = _parse_note(d.pop("note", UNSET)) + + + def _parse_recommended_at(data: object) -> datetime.date | None | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + try: + if not isinstance(data, str): + raise TypeError() + recommended_at_type_0 = isoparse(data).date() + + + + return recommended_at_type_0 + except (TypeError, ValueError, AttributeError, KeyError): + pass + return cast(datetime.date | None | Unset, data) + + recommended_at = _parse_recommended_at(d.pop("recommended_at", UNSET)) + + + media_recommendation_create = cls( + category=category, + title=title, + contact_id=contact_id, + creator=creator, + note=note, + recommended_at=recommended_at, + ) + + + media_recommendation_create.additional_properties = d + return media_recommendation_create + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/kindred-sdk/personal_crm_client/models/media_recommendation_public.py b/kindred-sdk/personal_crm_client/models/media_recommendation_public.py new file mode 100644 index 00000000..63921461 --- /dev/null +++ b/kindred-sdk/personal_crm_client/models/media_recommendation_public.py @@ -0,0 +1,212 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +from ..models.media_category import MediaCategory +from ..types import UNSET, Unset +from dateutil.parser import isoparse +from typing import cast +from uuid import UUID +import datetime + + + + + + +T = TypeVar("T", bound="MediaRecommendationPublic") + + + +@_attrs_define +class MediaRecommendationPublic: + """ + Attributes: + category (MediaCategory): + title (str): Title of the work. + id (UUID): + contact_id (UUID): + created_at (datetime.datetime): + updated_at (datetime.datetime): + creator (None | str | Unset): Author, director, artist, or similar creator. + note (None | str | Unset): Why it was recommended or personal reaction. + recommended_at (datetime.date | None | Unset): Date the recommendation was made. + """ + + category: MediaCategory + title: str + id: UUID + contact_id: UUID + created_at: datetime.datetime + updated_at: datetime.datetime + creator: None | str | Unset = UNSET + note: None | str | Unset = UNSET + recommended_at: datetime.date | None | Unset = UNSET + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + category = self.category.value + + title = self.title + + id = str(self.id) + + contact_id = str(self.contact_id) + + created_at = self.created_at.isoformat() + + updated_at = self.updated_at.isoformat() + + creator: None | str | Unset + if isinstance(self.creator, Unset): + creator = UNSET + else: + creator = self.creator + + note: None | str | Unset + if isinstance(self.note, Unset): + note = UNSET + else: + note = self.note + + recommended_at: None | str | Unset + if isinstance(self.recommended_at, Unset): + recommended_at = UNSET + elif isinstance(self.recommended_at, datetime.date): + recommended_at = self.recommended_at.isoformat() + else: + recommended_at = self.recommended_at + + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({ + "category": category, + "title": title, + "id": id, + "contact_id": contact_id, + "created_at": created_at, + "updated_at": updated_at, + }) + if creator is not UNSET: + field_dict["creator"] = creator + if note is not UNSET: + field_dict["note"] = note + if recommended_at is not UNSET: + field_dict["recommended_at"] = recommended_at + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + category = MediaCategory(d.pop("category")) + + + + + title = d.pop("title") + + id = UUID(d.pop("id")) + + + + + contact_id = UUID(d.pop("contact_id")) + + + + + created_at = isoparse(d.pop("created_at")) + + + + + updated_at = isoparse(d.pop("updated_at")) + + + + + def _parse_creator(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + creator = _parse_creator(d.pop("creator", UNSET)) + + + def _parse_note(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + note = _parse_note(d.pop("note", UNSET)) + + + def _parse_recommended_at(data: object) -> datetime.date | None | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + try: + if not isinstance(data, str): + raise TypeError() + recommended_at_type_0 = isoparse(data).date() + + + + return recommended_at_type_0 + except (TypeError, ValueError, AttributeError, KeyError): + pass + return cast(datetime.date | None | Unset, data) + + recommended_at = _parse_recommended_at(d.pop("recommended_at", UNSET)) + + + media_recommendation_public = cls( + category=category, + title=title, + id=id, + contact_id=contact_id, + created_at=created_at, + updated_at=updated_at, + creator=creator, + note=note, + recommended_at=recommended_at, + ) + + + media_recommendation_public.additional_properties = d + return media_recommendation_public + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/kindred-sdk/personal_crm_client/models/media_recommendation_update.py b/kindred-sdk/personal_crm_client/models/media_recommendation_update.py new file mode 100644 index 00000000..ae149e28 --- /dev/null +++ b/kindred-sdk/personal_crm_client/models/media_recommendation_update.py @@ -0,0 +1,202 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +from ..models.media_category import MediaCategory +from ..types import UNSET, Unset +from dateutil.parser import isoparse +from typing import cast +import datetime + + + + + + +T = TypeVar("T", bound="MediaRecommendationUpdate") + + + +@_attrs_define +class MediaRecommendationUpdate: + """ + Attributes: + category (MediaCategory | None | Unset): + title (None | str | Unset): + creator (None | str | Unset): + note (None | str | Unset): + recommended_at (datetime.date | None | Unset): + """ + + category: MediaCategory | None | Unset = UNSET + title: None | str | Unset = UNSET + creator: None | str | Unset = UNSET + note: None | str | Unset = UNSET + recommended_at: datetime.date | None | Unset = UNSET + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + category: None | str | Unset + if isinstance(self.category, Unset): + category = UNSET + elif isinstance(self.category, MediaCategory): + category = self.category.value + else: + category = self.category + + title: None | str | Unset + if isinstance(self.title, Unset): + title = UNSET + else: + title = self.title + + creator: None | str | Unset + if isinstance(self.creator, Unset): + creator = UNSET + else: + creator = self.creator + + note: None | str | Unset + if isinstance(self.note, Unset): + note = UNSET + else: + note = self.note + + recommended_at: None | str | Unset + if isinstance(self.recommended_at, Unset): + recommended_at = UNSET + elif isinstance(self.recommended_at, datetime.date): + recommended_at = self.recommended_at.isoformat() + else: + recommended_at = self.recommended_at + + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({ + }) + if category is not UNSET: + field_dict["category"] = category + if title is not UNSET: + field_dict["title"] = title + if creator is not UNSET: + field_dict["creator"] = creator + if note is not UNSET: + field_dict["note"] = note + if recommended_at is not UNSET: + field_dict["recommended_at"] = recommended_at + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + def _parse_category(data: object) -> MediaCategory | None | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + try: + if not isinstance(data, str): + raise TypeError() + category_type_0 = MediaCategory(data) + + + + return category_type_0 + except (TypeError, ValueError, AttributeError, KeyError): + pass + return cast(MediaCategory | None | Unset, data) + + category = _parse_category(d.pop("category", UNSET)) + + + def _parse_title(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + title = _parse_title(d.pop("title", UNSET)) + + + def _parse_creator(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + creator = _parse_creator(d.pop("creator", UNSET)) + + + def _parse_note(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + note = _parse_note(d.pop("note", UNSET)) + + + def _parse_recommended_at(data: object) -> datetime.date | None | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + try: + if not isinstance(data, str): + raise TypeError() + recommended_at_type_0 = isoparse(data).date() + + + + return recommended_at_type_0 + except (TypeError, ValueError, AttributeError, KeyError): + pass + return cast(datetime.date | None | Unset, data) + + recommended_at = _parse_recommended_at(d.pop("recommended_at", UNSET)) + + + media_recommendation_update = cls( + category=category, + title=title, + creator=creator, + note=note, + recommended_at=recommended_at, + ) + + + media_recommendation_update.additional_properties = d + return media_recommendation_update + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/kindred-sdk/personal_crm_client/models/media_recommendations_public.py b/kindred-sdk/personal_crm_client/models/media_recommendations_public.py new file mode 100644 index 00000000..18c70ca1 --- /dev/null +++ b/kindred-sdk/personal_crm_client/models/media_recommendations_public.py @@ -0,0 +1,102 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +from typing import cast + +if TYPE_CHECKING: + from ..models.media_recommendation_public import MediaRecommendationPublic + + + + + +T = TypeVar("T", bound="MediaRecommendationsPublic") + + + +@_attrs_define +class MediaRecommendationsPublic: + """ + Attributes: + data (list[MediaRecommendationPublic]): + count (int): + """ + + data: list[MediaRecommendationPublic] + count: int + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + from ..models.media_recommendation_public import MediaRecommendationPublic + data = [] + for data_item_data in self.data: + data_item = data_item_data.to_dict() + data.append(data_item) + + + + count = self.count + + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({ + "data": data, + "count": count, + }) + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + from ..models.media_recommendation_public import MediaRecommendationPublic + d = dict(src_dict) + data = [] + _data = d.pop("data") + for data_item_data in (_data): + data_item = MediaRecommendationPublic.from_dict(data_item_data) + + + + data.append(data_item) + + + count = d.pop("count") + + media_recommendations_public = cls( + data=data, + count=count, + ) + + + media_recommendations_public.additional_properties = d + return media_recommendations_public + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/kindred-sdk/personal_crm_client/models/mention_source_contact.py b/kindred-sdk/personal_crm_client/models/mention_source_contact.py new file mode 100644 index 00000000..6b4879e7 --- /dev/null +++ b/kindred-sdk/personal_crm_client/models/mention_source_contact.py @@ -0,0 +1,132 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +from ..types import UNSET, Unset +from typing import cast +from uuid import UUID + + + + + + +T = TypeVar("T", bound="MentionSourceContact") + + + +@_attrs_define +class MentionSourceContact: + """ + Attributes: + id (UUID): + first_name (str): + last_name (None | str | Unset): + avatar_url (None | str | Unset): + """ + + id: UUID + first_name: str + last_name: None | str | Unset = UNSET + avatar_url: None | str | Unset = UNSET + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + id = str(self.id) + + first_name = self.first_name + + last_name: None | str | Unset + if isinstance(self.last_name, Unset): + last_name = UNSET + else: + last_name = self.last_name + + avatar_url: None | str | Unset + if isinstance(self.avatar_url, Unset): + avatar_url = UNSET + else: + avatar_url = self.avatar_url + + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({ + "id": id, + "first_name": first_name, + }) + if last_name is not UNSET: + field_dict["last_name"] = last_name + if avatar_url is not UNSET: + field_dict["avatar_url"] = avatar_url + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + id = UUID(d.pop("id")) + + + + + first_name = d.pop("first_name") + + def _parse_last_name(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + last_name = _parse_last_name(d.pop("last_name", UNSET)) + + + def _parse_avatar_url(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + avatar_url = _parse_avatar_url(d.pop("avatar_url", UNSET)) + + + mention_source_contact = cls( + id=id, + first_name=first_name, + last_name=last_name, + avatar_url=avatar_url, + ) + + + mention_source_contact.additional_properties = d + return mention_source_contact + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/kindred-sdk/personal_crm_client/models/message.py b/kindred-sdk/personal_crm_client/models/message.py new file mode 100644 index 00000000..368f4302 --- /dev/null +++ b/kindred-sdk/personal_crm_client/models/message.py @@ -0,0 +1,76 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + + + + + + + +T = TypeVar("T", bound="Message") + + + +@_attrs_define +class Message: + """ + Attributes: + message (str): + """ + + message: str + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + message = self.message + + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({ + "message": message, + }) + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + message = d.pop("message") + + message = cls( + message=message, + ) + + + message.additional_properties = d + return message + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/kindred-sdk/personal_crm_client/models/new_password.py b/kindred-sdk/personal_crm_client/models/new_password.py new file mode 100644 index 00000000..1833dbcf --- /dev/null +++ b/kindred-sdk/personal_crm_client/models/new_password.py @@ -0,0 +1,84 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + + + + + + + +T = TypeVar("T", bound="NewPassword") + + + +@_attrs_define +class NewPassword: + """ + Attributes: + token (str): + new_password (str): + """ + + token: str + new_password: str + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + token = self.token + + new_password = self.new_password + + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({ + "token": token, + "new_password": new_password, + }) + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + token = d.pop("token") + + new_password = d.pop("new_password") + + new_password = cls( + token=token, + new_password=new_password, + ) + + + new_password.additional_properties = d + return new_password + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/kindred-sdk/personal_crm_client/models/note_create.py b/kindred-sdk/personal_crm_client/models/note_create.py new file mode 100644 index 00000000..12d8534b --- /dev/null +++ b/kindred-sdk/personal_crm_client/models/note_create.py @@ -0,0 +1,88 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +from uuid import UUID + + + + + + +T = TypeVar("T", bound="NoteCreate") + + + +@_attrs_define +class NoteCreate: + """ + Attributes: + body (str): Note body, 1-50000 chars. + contact_id (UUID): + """ + + body: str + contact_id: UUID + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + body = self.body + + contact_id = str(self.contact_id) + + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({ + "body": body, + "contact_id": contact_id, + }) + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + body = d.pop("body") + + contact_id = UUID(d.pop("contact_id")) + + + + + note_create = cls( + body=body, + contact_id=contact_id, + ) + + + note_create.additional_properties = d + return note_create + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/kindred-sdk/personal_crm_client/models/note_mention_public.py b/kindred-sdk/personal_crm_client/models/note_mention_public.py new file mode 100644 index 00000000..c128c1be --- /dev/null +++ b/kindred-sdk/personal_crm_client/models/note_mention_public.py @@ -0,0 +1,117 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +from dateutil.parser import isoparse +from typing import cast +from uuid import UUID +import datetime + +if TYPE_CHECKING: + from ..models.mention_source_contact import MentionSourceContact + + + + + +T = TypeVar("T", bound="NoteMentionPublic") + + + +@_attrs_define +class NoteMentionPublic: + """ + Attributes: + note_id (UUID): + note_body (str): + note_created_at (datetime.datetime): + source_contact (MentionSourceContact): + """ + + note_id: UUID + note_body: str + note_created_at: datetime.datetime + source_contact: MentionSourceContact + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + from ..models.mention_source_contact import MentionSourceContact + note_id = str(self.note_id) + + note_body = self.note_body + + note_created_at = self.note_created_at.isoformat() + + source_contact = self.source_contact.to_dict() + + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({ + "note_id": note_id, + "note_body": note_body, + "note_created_at": note_created_at, + "source_contact": source_contact, + }) + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + from ..models.mention_source_contact import MentionSourceContact + d = dict(src_dict) + note_id = UUID(d.pop("note_id")) + + + + + note_body = d.pop("note_body") + + note_created_at = isoparse(d.pop("note_created_at")) + + + + + source_contact = MentionSourceContact.from_dict(d.pop("source_contact")) + + + + + note_mention_public = cls( + note_id=note_id, + note_body=note_body, + note_created_at=note_created_at, + source_contact=source_contact, + ) + + + note_mention_public.additional_properties = d + return note_mention_public + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/kindred-sdk/personal_crm_client/models/note_public.py b/kindred-sdk/personal_crm_client/models/note_public.py new file mode 100644 index 00000000..0ee1eaf7 --- /dev/null +++ b/kindred-sdk/personal_crm_client/models/note_public.py @@ -0,0 +1,124 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +from dateutil.parser import isoparse +from typing import cast +from uuid import UUID +import datetime + + + + + + +T = TypeVar("T", bound="NotePublic") + + + +@_attrs_define +class NotePublic: + """ + Attributes: + body (str): Note body, 1-50000 chars. + id (UUID): + contact_id (UUID): + created_at (datetime.datetime): + updated_at (datetime.datetime): + """ + + body: str + id: UUID + contact_id: UUID + created_at: datetime.datetime + updated_at: datetime.datetime + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + body = self.body + + id = str(self.id) + + contact_id = str(self.contact_id) + + created_at = self.created_at.isoformat() + + updated_at = self.updated_at.isoformat() + + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({ + "body": body, + "id": id, + "contact_id": contact_id, + "created_at": created_at, + "updated_at": updated_at, + }) + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + body = d.pop("body") + + id = UUID(d.pop("id")) + + + + + contact_id = UUID(d.pop("contact_id")) + + + + + created_at = isoparse(d.pop("created_at")) + + + + + updated_at = isoparse(d.pop("updated_at")) + + + + + note_public = cls( + body=body, + id=id, + contact_id=contact_id, + created_at=created_at, + updated_at=updated_at, + ) + + + note_public.additional_properties = d + return note_public + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/kindred-sdk/personal_crm_client/models/note_update.py b/kindred-sdk/personal_crm_client/models/note_update.py new file mode 100644 index 00000000..5f51a200 --- /dev/null +++ b/kindred-sdk/personal_crm_client/models/note_update.py @@ -0,0 +1,91 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +from ..types import UNSET, Unset +from typing import cast + + + + + + +T = TypeVar("T", bound="NoteUpdate") + + + +@_attrs_define +class NoteUpdate: + """ + Attributes: + body (None | str | Unset): + """ + + body: None | str | Unset = UNSET + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + body: None | str | Unset + if isinstance(self.body, Unset): + body = UNSET + else: + body = self.body + + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({ + }) + if body is not UNSET: + field_dict["body"] = body + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + def _parse_body(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + body = _parse_body(d.pop("body", UNSET)) + + + note_update = cls( + body=body, + ) + + + note_update.additional_properties = d + return note_update + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/kindred-sdk/personal_crm_client/models/notes_public.py b/kindred-sdk/personal_crm_client/models/notes_public.py new file mode 100644 index 00000000..67d5e2a3 --- /dev/null +++ b/kindred-sdk/personal_crm_client/models/notes_public.py @@ -0,0 +1,102 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +from typing import cast + +if TYPE_CHECKING: + from ..models.note_public import NotePublic + + + + + +T = TypeVar("T", bound="NotesPublic") + + + +@_attrs_define +class NotesPublic: + """ + Attributes: + data (list[NotePublic]): + count (int): + """ + + data: list[NotePublic] + count: int + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + from ..models.note_public import NotePublic + data = [] + for data_item_data in self.data: + data_item = data_item_data.to_dict() + data.append(data_item) + + + + count = self.count + + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({ + "data": data, + "count": count, + }) + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + from ..models.note_public import NotePublic + d = dict(src_dict) + data = [] + _data = d.pop("data") + for data_item_data in (_data): + data_item = NotePublic.from_dict(data_item_data) + + + + data.append(data_item) + + + count = d.pop("count") + + notes_public = cls( + data=data, + count=count, + ) + + + notes_public.additional_properties = d + return notes_public + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/kindred-sdk/personal_crm_client/models/pet_create.py b/kindred-sdk/personal_crm_client/models/pet_create.py new file mode 100644 index 00000000..3f145b8a --- /dev/null +++ b/kindred-sdk/personal_crm_client/models/pet_create.py @@ -0,0 +1,153 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +from ..types import UNSET, Unset +from typing import cast +from uuid import UUID + + + + + + +T = TypeVar("T", bound="PetCreate") + + + +@_attrs_define +class PetCreate: + """ + Attributes: + name (str): Pet's name. + contact_id (UUID): + species (None | str | Unset): Species like dog, cat, bird. + breed (None | str | Unset): Breed, if known. + notes (None | str | Unset): Freeform notes (e.g. allergies, birthday). + """ + + name: str + contact_id: UUID + species: None | str | Unset = UNSET + breed: None | str | Unset = UNSET + notes: None | str | Unset = UNSET + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + name = self.name + + contact_id = str(self.contact_id) + + species: None | str | Unset + if isinstance(self.species, Unset): + species = UNSET + else: + species = self.species + + breed: None | str | Unset + if isinstance(self.breed, Unset): + breed = UNSET + else: + breed = self.breed + + notes: None | str | Unset + if isinstance(self.notes, Unset): + notes = UNSET + else: + notes = self.notes + + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({ + "name": name, + "contact_id": contact_id, + }) + if species is not UNSET: + field_dict["species"] = species + if breed is not UNSET: + field_dict["breed"] = breed + if notes is not UNSET: + field_dict["notes"] = notes + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + name = d.pop("name") + + contact_id = UUID(d.pop("contact_id")) + + + + + def _parse_species(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + species = _parse_species(d.pop("species", UNSET)) + + + def _parse_breed(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + breed = _parse_breed(d.pop("breed", UNSET)) + + + def _parse_notes(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + notes = _parse_notes(d.pop("notes", UNSET)) + + + pet_create = cls( + name=name, + contact_id=contact_id, + species=species, + breed=breed, + notes=notes, + ) + + + pet_create.additional_properties = d + return pet_create + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/kindred-sdk/personal_crm_client/models/pet_public.py b/kindred-sdk/personal_crm_client/models/pet_public.py new file mode 100644 index 00000000..52ee1d80 --- /dev/null +++ b/kindred-sdk/personal_crm_client/models/pet_public.py @@ -0,0 +1,164 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +from ..types import UNSET, Unset +from typing import cast +from uuid import UUID + + + + + + +T = TypeVar("T", bound="PetPublic") + + + +@_attrs_define +class PetPublic: + """ + Attributes: + name (str): Pet's name. + id (UUID): + contact_id (UUID): + species (None | str | Unset): Species like dog, cat, bird. + breed (None | str | Unset): Breed, if known. + notes (None | str | Unset): Freeform notes (e.g. allergies, birthday). + """ + + name: str + id: UUID + contact_id: UUID + species: None | str | Unset = UNSET + breed: None | str | Unset = UNSET + notes: None | str | Unset = UNSET + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + name = self.name + + id = str(self.id) + + contact_id = str(self.contact_id) + + species: None | str | Unset + if isinstance(self.species, Unset): + species = UNSET + else: + species = self.species + + breed: None | str | Unset + if isinstance(self.breed, Unset): + breed = UNSET + else: + breed = self.breed + + notes: None | str | Unset + if isinstance(self.notes, Unset): + notes = UNSET + else: + notes = self.notes + + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({ + "name": name, + "id": id, + "contact_id": contact_id, + }) + if species is not UNSET: + field_dict["species"] = species + if breed is not UNSET: + field_dict["breed"] = breed + if notes is not UNSET: + field_dict["notes"] = notes + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + name = d.pop("name") + + id = UUID(d.pop("id")) + + + + + contact_id = UUID(d.pop("contact_id")) + + + + + def _parse_species(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + species = _parse_species(d.pop("species", UNSET)) + + + def _parse_breed(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + breed = _parse_breed(d.pop("breed", UNSET)) + + + def _parse_notes(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + notes = _parse_notes(d.pop("notes", UNSET)) + + + pet_public = cls( + name=name, + id=id, + contact_id=contact_id, + species=species, + breed=breed, + notes=notes, + ) + + + pet_public.additional_properties = d + return pet_public + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/kindred-sdk/personal_crm_client/models/pet_update.py b/kindred-sdk/personal_crm_client/models/pet_update.py new file mode 100644 index 00000000..01bfc0d9 --- /dev/null +++ b/kindred-sdk/personal_crm_client/models/pet_update.py @@ -0,0 +1,154 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +from ..types import UNSET, Unset +from typing import cast + + + + + + +T = TypeVar("T", bound="PetUpdate") + + + +@_attrs_define +class PetUpdate: + """ + Attributes: + name (None | str | Unset): + species (None | str | Unset): + breed (None | str | Unset): + notes (None | str | Unset): + """ + + name: None | str | Unset = UNSET + species: None | str | Unset = UNSET + breed: None | str | Unset = UNSET + notes: None | str | Unset = UNSET + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + name: None | str | Unset + if isinstance(self.name, Unset): + name = UNSET + else: + name = self.name + + species: None | str | Unset + if isinstance(self.species, Unset): + species = UNSET + else: + species = self.species + + breed: None | str | Unset + if isinstance(self.breed, Unset): + breed = UNSET + else: + breed = self.breed + + notes: None | str | Unset + if isinstance(self.notes, Unset): + notes = UNSET + else: + notes = self.notes + + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({ + }) + if name is not UNSET: + field_dict["name"] = name + if species is not UNSET: + field_dict["species"] = species + if breed is not UNSET: + field_dict["breed"] = breed + if notes is not UNSET: + field_dict["notes"] = notes + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + def _parse_name(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + name = _parse_name(d.pop("name", UNSET)) + + + def _parse_species(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + species = _parse_species(d.pop("species", UNSET)) + + + def _parse_breed(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + breed = _parse_breed(d.pop("breed", UNSET)) + + + def _parse_notes(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + notes = _parse_notes(d.pop("notes", UNSET)) + + + pet_update = cls( + name=name, + species=species, + breed=breed, + notes=notes, + ) + + + pet_update.additional_properties = d + return pet_update + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/kindred-sdk/personal_crm_client/models/private_user_create.py b/kindred-sdk/personal_crm_client/models/private_user_create.py new file mode 100644 index 00000000..0274db59 --- /dev/null +++ b/kindred-sdk/personal_crm_client/models/private_user_create.py @@ -0,0 +1,102 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +from ..types import UNSET, Unset + + + + + + +T = TypeVar("T", bound="PrivateUserCreate") + + + +@_attrs_define +class PrivateUserCreate: + """ + Attributes: + email (str): + password (str): + full_name (str): + is_verified (bool | Unset): Default: False. + """ + + email: str + password: str + full_name: str + is_verified: bool | Unset = False + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + email = self.email + + password = self.password + + full_name = self.full_name + + is_verified = self.is_verified + + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({ + "email": email, + "password": password, + "full_name": full_name, + }) + if is_verified is not UNSET: + field_dict["is_verified"] = is_verified + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + email = d.pop("email") + + password = d.pop("password") + + full_name = d.pop("full_name") + + is_verified = d.pop("is_verified", UNSET) + + private_user_create = cls( + email=email, + password=password, + full_name=full_name, + is_verified=is_verified, + ) + + + private_user_create.additional_properties = d + return private_user_create + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/kindred-sdk/personal_crm_client/models/relationship_create.py b/kindred-sdk/personal_crm_client/models/relationship_create.py new file mode 100644 index 00000000..1a95bf90 --- /dev/null +++ b/kindred-sdk/personal_crm_client/models/relationship_create.py @@ -0,0 +1,144 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +from ..types import UNSET, Unset +from typing import cast +from uuid import UUID + + + + + + +T = TypeVar("T", bound="RelationshipCreate") + + + +@_attrs_define +class RelationshipCreate: + """ + Attributes: + relationship_type (str): Kind of relationship: spouse, child, parent, sibling, friend, colleague, etc. + contact_id (UUID): + related_contact_id (UUID): + notes (None | str | Unset): Additional context about the relationship. + inverse_relationship_type (None | str | Unset): Type for the auto-generated inverse row. If omitted, the server + infers it from a known map of symmetric/asymmetric types and returns 422 when it cannot. + """ + + relationship_type: str + contact_id: UUID + related_contact_id: UUID + notes: None | str | Unset = UNSET + inverse_relationship_type: None | str | Unset = UNSET + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + relationship_type = self.relationship_type + + contact_id = str(self.contact_id) + + related_contact_id = str(self.related_contact_id) + + notes: None | str | Unset + if isinstance(self.notes, Unset): + notes = UNSET + else: + notes = self.notes + + inverse_relationship_type: None | str | Unset + if isinstance(self.inverse_relationship_type, Unset): + inverse_relationship_type = UNSET + else: + inverse_relationship_type = self.inverse_relationship_type + + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({ + "relationship_type": relationship_type, + "contact_id": contact_id, + "related_contact_id": related_contact_id, + }) + if notes is not UNSET: + field_dict["notes"] = notes + if inverse_relationship_type is not UNSET: + field_dict["inverse_relationship_type"] = inverse_relationship_type + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + relationship_type = d.pop("relationship_type") + + contact_id = UUID(d.pop("contact_id")) + + + + + related_contact_id = UUID(d.pop("related_contact_id")) + + + + + def _parse_notes(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + notes = _parse_notes(d.pop("notes", UNSET)) + + + def _parse_inverse_relationship_type(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + inverse_relationship_type = _parse_inverse_relationship_type(d.pop("inverse_relationship_type", UNSET)) + + + relationship_create = cls( + relationship_type=relationship_type, + contact_id=contact_id, + related_contact_id=related_contact_id, + notes=notes, + inverse_relationship_type=inverse_relationship_type, + ) + + + relationship_create.additional_properties = d + return relationship_create + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/kindred-sdk/personal_crm_client/models/relationship_public.py b/kindred-sdk/personal_crm_client/models/relationship_public.py new file mode 100644 index 00000000..4e5efd62 --- /dev/null +++ b/kindred-sdk/personal_crm_client/models/relationship_public.py @@ -0,0 +1,166 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +from ..types import UNSET, Unset +from typing import cast +from uuid import UUID + + + + + + +T = TypeVar("T", bound="RelationshipPublic") + + + +@_attrs_define +class RelationshipPublic: + """ + Attributes: + relationship_type (str): Kind of relationship: spouse, child, parent, sibling, friend, colleague, etc. + id (UUID): + contact_id (UUID): + related_contact_id (UUID): + notes (None | str | Unset): Additional context about the relationship. + inverse_id (None | Unset | UUID): + """ + + relationship_type: str + id: UUID + contact_id: UUID + related_contact_id: UUID + notes: None | str | Unset = UNSET + inverse_id: None | Unset | UUID = UNSET + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + relationship_type = self.relationship_type + + id = str(self.id) + + contact_id = str(self.contact_id) + + related_contact_id = str(self.related_contact_id) + + notes: None | str | Unset + if isinstance(self.notes, Unset): + notes = UNSET + else: + notes = self.notes + + inverse_id: None | str | Unset + if isinstance(self.inverse_id, Unset): + inverse_id = UNSET + elif isinstance(self.inverse_id, UUID): + inverse_id = str(self.inverse_id) + else: + inverse_id = self.inverse_id + + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({ + "relationship_type": relationship_type, + "id": id, + "contact_id": contact_id, + "related_contact_id": related_contact_id, + }) + if notes is not UNSET: + field_dict["notes"] = notes + if inverse_id is not UNSET: + field_dict["inverse_id"] = inverse_id + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + relationship_type = d.pop("relationship_type") + + id = UUID(d.pop("id")) + + + + + contact_id = UUID(d.pop("contact_id")) + + + + + related_contact_id = UUID(d.pop("related_contact_id")) + + + + + def _parse_notes(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + notes = _parse_notes(d.pop("notes", UNSET)) + + + def _parse_inverse_id(data: object) -> None | Unset | UUID: + if data is None: + return data + if isinstance(data, Unset): + return data + try: + if not isinstance(data, str): + raise TypeError() + inverse_id_type_0 = UUID(data) + + + + return inverse_id_type_0 + except (TypeError, ValueError, AttributeError, KeyError): + pass + return cast(None | Unset | UUID, data) + + inverse_id = _parse_inverse_id(d.pop("inverse_id", UNSET)) + + + relationship_public = cls( + relationship_type=relationship_type, + id=id, + contact_id=contact_id, + related_contact_id=related_contact_id, + notes=notes, + inverse_id=inverse_id, + ) + + + relationship_public.additional_properties = d + return relationship_public + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/kindred-sdk/personal_crm_client/models/relationship_update.py b/kindred-sdk/personal_crm_client/models/relationship_update.py new file mode 100644 index 00000000..90a6c438 --- /dev/null +++ b/kindred-sdk/personal_crm_client/models/relationship_update.py @@ -0,0 +1,112 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +from ..types import UNSET, Unset +from typing import cast + + + + + + +T = TypeVar("T", bound="RelationshipUpdate") + + + +@_attrs_define +class RelationshipUpdate: + """ + Attributes: + relationship_type (None | str | Unset): + notes (None | str | Unset): + """ + + relationship_type: None | str | Unset = UNSET + notes: None | str | Unset = UNSET + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + relationship_type: None | str | Unset + if isinstance(self.relationship_type, Unset): + relationship_type = UNSET + else: + relationship_type = self.relationship_type + + notes: None | str | Unset + if isinstance(self.notes, Unset): + notes = UNSET + else: + notes = self.notes + + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({ + }) + if relationship_type is not UNSET: + field_dict["relationship_type"] = relationship_type + if notes is not UNSET: + field_dict["notes"] = notes + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + def _parse_relationship_type(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + relationship_type = _parse_relationship_type(d.pop("relationship_type", UNSET)) + + + def _parse_notes(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + notes = _parse_notes(d.pop("notes", UNSET)) + + + relationship_update = cls( + relationship_type=relationship_type, + notes=notes, + ) + + + relationship_update.additional_properties = d + return relationship_update + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/kindred-sdk/personal_crm_client/models/relationships_lookup_inverse_response_relationships_lookup_inverse.py b/kindred-sdk/personal_crm_client/models/relationships_lookup_inverse_response_relationships_lookup_inverse.py new file mode 100644 index 00000000..2651243f --- /dev/null +++ b/kindred-sdk/personal_crm_client/models/relationships_lookup_inverse_response_relationships_lookup_inverse.py @@ -0,0 +1,80 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +from typing import cast + + + + + + +T = TypeVar("T", bound="RelationshipsLookupInverseResponseRelationshipsLookupInverse") + + + +@_attrs_define +class RelationshipsLookupInverseResponseRelationshipsLookupInverse: + """ + """ + + additional_properties: dict[str, None | str] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + + field_dict: dict[str, Any] = {} + for prop_name, prop in self.additional_properties.items(): + + field_dict[prop_name] = prop + + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + relationships_lookup_inverse_response_relationships_lookup_inverse = cls( + ) + + + additional_properties = {} + for prop_name, prop_dict in d.items(): + def _parse_additional_property(data: object) -> None | str: + if data is None: + return data + return cast(None | str, data) + + additional_property = _parse_additional_property(prop_dict) + + additional_properties[prop_name] = additional_property + + relationships_lookup_inverse_response_relationships_lookup_inverse.additional_properties = additional_properties + return relationships_lookup_inverse_response_relationships_lookup_inverse + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> None | str: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: None | str) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/kindred-sdk/personal_crm_client/models/reminder_create.py b/kindred-sdk/personal_crm_client/models/reminder_create.py new file mode 100644 index 00000000..17813987 --- /dev/null +++ b/kindred-sdk/personal_crm_client/models/reminder_create.py @@ -0,0 +1,176 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +from ..models.reminder_frequency import ReminderFrequency +from ..types import UNSET, Unset +from dateutil.parser import isoparse +from typing import cast +from uuid import UUID +import datetime + + + + + + +T = TypeVar("T", bound="ReminderCreate") + + + +@_attrs_define +class ReminderCreate: + """ + Attributes: + title (str): Reminder title. + remind_at (datetime.datetime): When to fire the reminder. + description (None | str | Unset): Extra details shown with the reminder. + frequency (ReminderFrequency | Unset): + is_active (bool | Unset): Enable or disable without deleting. Default: True. + contact_id (None | Unset | UUID): + """ + + title: str + remind_at: datetime.datetime + description: None | str | Unset = UNSET + frequency: ReminderFrequency | Unset = UNSET + is_active: bool | Unset = True + contact_id: None | Unset | UUID = UNSET + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + title = self.title + + remind_at = self.remind_at.isoformat() + + description: None | str | Unset + if isinstance(self.description, Unset): + description = UNSET + else: + description = self.description + + frequency: str | Unset = UNSET + if not isinstance(self.frequency, Unset): + frequency = self.frequency.value + + + is_active = self.is_active + + contact_id: None | str | Unset + if isinstance(self.contact_id, Unset): + contact_id = UNSET + elif isinstance(self.contact_id, UUID): + contact_id = str(self.contact_id) + else: + contact_id = self.contact_id + + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({ + "title": title, + "remind_at": remind_at, + }) + if description is not UNSET: + field_dict["description"] = description + if frequency is not UNSET: + field_dict["frequency"] = frequency + if is_active is not UNSET: + field_dict["is_active"] = is_active + if contact_id is not UNSET: + field_dict["contact_id"] = contact_id + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + title = d.pop("title") + + remind_at = isoparse(d.pop("remind_at")) + + + + + def _parse_description(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + description = _parse_description(d.pop("description", UNSET)) + + + _frequency = d.pop("frequency", UNSET) + frequency: ReminderFrequency | Unset + if isinstance(_frequency, Unset): + frequency = UNSET + else: + frequency = ReminderFrequency(_frequency) + + + + + is_active = d.pop("is_active", UNSET) + + def _parse_contact_id(data: object) -> None | Unset | UUID: + if data is None: + return data + if isinstance(data, Unset): + return data + try: + if not isinstance(data, str): + raise TypeError() + contact_id_type_0 = UUID(data) + + + + return contact_id_type_0 + except (TypeError, ValueError, AttributeError, KeyError): + pass + return cast(None | Unset | UUID, data) + + contact_id = _parse_contact_id(d.pop("contact_id", UNSET)) + + + reminder_create = cls( + title=title, + remind_at=remind_at, + description=description, + frequency=frequency, + is_active=is_active, + contact_id=contact_id, + ) + + + reminder_create.additional_properties = d + return reminder_create + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/kindred-sdk/personal_crm_client/models/reminder_frequency.py b/kindred-sdk/personal_crm_client/models/reminder_frequency.py new file mode 100644 index 00000000..7bef71af --- /dev/null +++ b/kindred-sdk/personal_crm_client/models/reminder_frequency.py @@ -0,0 +1,11 @@ +from enum import Enum + +class ReminderFrequency(str, Enum): + DAILY = "daily" + MONTHLY = "monthly" + ONCE = "once" + WEEKLY = "weekly" + YEARLY = "yearly" + + def __str__(self) -> str: + return str(self.value) diff --git a/kindred-sdk/personal_crm_client/models/reminder_public.py b/kindred-sdk/personal_crm_client/models/reminder_public.py new file mode 100644 index 00000000..336c1f81 --- /dev/null +++ b/kindred-sdk/personal_crm_client/models/reminder_public.py @@ -0,0 +1,249 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +from ..models.reminder_frequency import ReminderFrequency +from ..types import UNSET, Unset +from dateutil.parser import isoparse +from typing import cast +from uuid import UUID +import datetime + + + + + + +T = TypeVar("T", bound="ReminderPublic") + + + +@_attrs_define +class ReminderPublic: + """ + Attributes: + title (str): Reminder title. + remind_at (datetime.datetime): When to fire the reminder. + id (UUID): + contact_id (None | UUID): + last_sent_at (datetime.datetime | None): + snoozed_until (datetime.datetime | None): + created_at (datetime.datetime): + description (None | str | Unset): Extra details shown with the reminder. + frequency (ReminderFrequency | Unset): + is_active (bool | Unset): Enable or disable without deleting. Default: True. + """ + + title: str + remind_at: datetime.datetime + id: UUID + contact_id: None | UUID + last_sent_at: datetime.datetime | None + snoozed_until: datetime.datetime | None + created_at: datetime.datetime + description: None | str | Unset = UNSET + frequency: ReminderFrequency | Unset = UNSET + is_active: bool | Unset = True + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + title = self.title + + remind_at = self.remind_at.isoformat() + + id = str(self.id) + + contact_id: None | str + if isinstance(self.contact_id, UUID): + contact_id = str(self.contact_id) + else: + contact_id = self.contact_id + + last_sent_at: None | str + if isinstance(self.last_sent_at, datetime.datetime): + last_sent_at = self.last_sent_at.isoformat() + else: + last_sent_at = self.last_sent_at + + snoozed_until: None | str + if isinstance(self.snoozed_until, datetime.datetime): + snoozed_until = self.snoozed_until.isoformat() + else: + snoozed_until = self.snoozed_until + + created_at = self.created_at.isoformat() + + description: None | str | Unset + if isinstance(self.description, Unset): + description = UNSET + else: + description = self.description + + frequency: str | Unset = UNSET + if not isinstance(self.frequency, Unset): + frequency = self.frequency.value + + + is_active = self.is_active + + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({ + "title": title, + "remind_at": remind_at, + "id": id, + "contact_id": contact_id, + "last_sent_at": last_sent_at, + "snoozed_until": snoozed_until, + "created_at": created_at, + }) + if description is not UNSET: + field_dict["description"] = description + if frequency is not UNSET: + field_dict["frequency"] = frequency + if is_active is not UNSET: + field_dict["is_active"] = is_active + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + title = d.pop("title") + + remind_at = isoparse(d.pop("remind_at")) + + + + + id = UUID(d.pop("id")) + + + + + def _parse_contact_id(data: object) -> None | UUID: + if data is None: + return data + try: + if not isinstance(data, str): + raise TypeError() + contact_id_type_0 = UUID(data) + + + + return contact_id_type_0 + except (TypeError, ValueError, AttributeError, KeyError): + pass + return cast(None | UUID, data) + + contact_id = _parse_contact_id(d.pop("contact_id")) + + + def _parse_last_sent_at(data: object) -> datetime.datetime | None: + if data is None: + return data + try: + if not isinstance(data, str): + raise TypeError() + last_sent_at_type_0 = isoparse(data) + + + + return last_sent_at_type_0 + except (TypeError, ValueError, AttributeError, KeyError): + pass + return cast(datetime.datetime | None, data) + + last_sent_at = _parse_last_sent_at(d.pop("last_sent_at")) + + + def _parse_snoozed_until(data: object) -> datetime.datetime | None: + if data is None: + return data + try: + if not isinstance(data, str): + raise TypeError() + snoozed_until_type_0 = isoparse(data) + + + + return snoozed_until_type_0 + except (TypeError, ValueError, AttributeError, KeyError): + pass + return cast(datetime.datetime | None, data) + + snoozed_until = _parse_snoozed_until(d.pop("snoozed_until")) + + + created_at = isoparse(d.pop("created_at")) + + + + + def _parse_description(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + description = _parse_description(d.pop("description", UNSET)) + + + _frequency = d.pop("frequency", UNSET) + frequency: ReminderFrequency | Unset + if isinstance(_frequency, Unset): + frequency = UNSET + else: + frequency = ReminderFrequency(_frequency) + + + + + is_active = d.pop("is_active", UNSET) + + reminder_public = cls( + title=title, + remind_at=remind_at, + id=id, + contact_id=contact_id, + last_sent_at=last_sent_at, + snoozed_until=snoozed_until, + created_at=created_at, + description=description, + frequency=frequency, + is_active=is_active, + ) + + + reminder_public.additional_properties = d + return reminder_public + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/kindred-sdk/personal_crm_client/models/reminder_update.py b/kindred-sdk/personal_crm_client/models/reminder_update.py new file mode 100644 index 00000000..bc38cff0 --- /dev/null +++ b/kindred-sdk/personal_crm_client/models/reminder_update.py @@ -0,0 +1,202 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +from ..models.reminder_frequency import ReminderFrequency +from ..types import UNSET, Unset +from dateutil.parser import isoparse +from typing import cast +import datetime + + + + + + +T = TypeVar("T", bound="ReminderUpdate") + + + +@_attrs_define +class ReminderUpdate: + """ + Attributes: + title (None | str | Unset): + description (None | str | Unset): + remind_at (datetime.datetime | None | Unset): + frequency (None | ReminderFrequency | Unset): + is_active (bool | None | Unset): + """ + + title: None | str | Unset = UNSET + description: None | str | Unset = UNSET + remind_at: datetime.datetime | None | Unset = UNSET + frequency: None | ReminderFrequency | Unset = UNSET + is_active: bool | None | Unset = UNSET + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + title: None | str | Unset + if isinstance(self.title, Unset): + title = UNSET + else: + title = self.title + + description: None | str | Unset + if isinstance(self.description, Unset): + description = UNSET + else: + description = self.description + + remind_at: None | str | Unset + if isinstance(self.remind_at, Unset): + remind_at = UNSET + elif isinstance(self.remind_at, datetime.datetime): + remind_at = self.remind_at.isoformat() + else: + remind_at = self.remind_at + + frequency: None | str | Unset + if isinstance(self.frequency, Unset): + frequency = UNSET + elif isinstance(self.frequency, ReminderFrequency): + frequency = self.frequency.value + else: + frequency = self.frequency + + is_active: bool | None | Unset + if isinstance(self.is_active, Unset): + is_active = UNSET + else: + is_active = self.is_active + + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({ + }) + if title is not UNSET: + field_dict["title"] = title + if description is not UNSET: + field_dict["description"] = description + if remind_at is not UNSET: + field_dict["remind_at"] = remind_at + if frequency is not UNSET: + field_dict["frequency"] = frequency + if is_active is not UNSET: + field_dict["is_active"] = is_active + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + def _parse_title(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + title = _parse_title(d.pop("title", UNSET)) + + + def _parse_description(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + description = _parse_description(d.pop("description", UNSET)) + + + def _parse_remind_at(data: object) -> datetime.datetime | None | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + try: + if not isinstance(data, str): + raise TypeError() + remind_at_type_0 = isoparse(data) + + + + return remind_at_type_0 + except (TypeError, ValueError, AttributeError, KeyError): + pass + return cast(datetime.datetime | None | Unset, data) + + remind_at = _parse_remind_at(d.pop("remind_at", UNSET)) + + + def _parse_frequency(data: object) -> None | ReminderFrequency | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + try: + if not isinstance(data, str): + raise TypeError() + frequency_type_0 = ReminderFrequency(data) + + + + return frequency_type_0 + except (TypeError, ValueError, AttributeError, KeyError): + pass + return cast(None | ReminderFrequency | Unset, data) + + frequency = _parse_frequency(d.pop("frequency", UNSET)) + + + def _parse_is_active(data: object) -> bool | None | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(bool | None | Unset, data) + + is_active = _parse_is_active(d.pop("is_active", UNSET)) + + + reminder_update = cls( + title=title, + description=description, + remind_at=remind_at, + frequency=frequency, + is_active=is_active, + ) + + + reminder_update.additional_properties = d + return reminder_update + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/kindred-sdk/personal_crm_client/models/reminders_public.py b/kindred-sdk/personal_crm_client/models/reminders_public.py new file mode 100644 index 00000000..369b08ff --- /dev/null +++ b/kindred-sdk/personal_crm_client/models/reminders_public.py @@ -0,0 +1,102 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +from typing import cast + +if TYPE_CHECKING: + from ..models.reminder_public import ReminderPublic + + + + + +T = TypeVar("T", bound="RemindersPublic") + + + +@_attrs_define +class RemindersPublic: + """ + Attributes: + data (list[ReminderPublic]): + count (int): + """ + + data: list[ReminderPublic] + count: int + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + from ..models.reminder_public import ReminderPublic + data = [] + for data_item_data in self.data: + data_item = data_item_data.to_dict() + data.append(data_item) + + + + count = self.count + + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({ + "data": data, + "count": count, + }) + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + from ..models.reminder_public import ReminderPublic + d = dict(src_dict) + data = [] + _data = d.pop("data") + for data_item_data in (_data): + data_item = ReminderPublic.from_dict(data_item_data) + + + + data.append(data_item) + + + count = d.pop("count") + + reminders_public = cls( + data=data, + count=count, + ) + + + reminders_public.additional_properties = d + return reminders_public + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/kindred-sdk/personal_crm_client/models/share_in.py b/kindred-sdk/personal_crm_client/models/share_in.py new file mode 100644 index 00000000..a0e259c3 --- /dev/null +++ b/kindred-sdk/personal_crm_client/models/share_in.py @@ -0,0 +1,91 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +from uuid import UUID + + + + + + +T = TypeVar("T", bound="ShareIn") + + + +@_attrs_define +class ShareIn: + """ + Attributes: + tag_id (UUID): + grantee_id (UUID): + """ + + tag_id: UUID + grantee_id: UUID + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + tag_id = str(self.tag_id) + + grantee_id = str(self.grantee_id) + + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({ + "tag_id": tag_id, + "grantee_id": grantee_id, + }) + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + tag_id = UUID(d.pop("tag_id")) + + + + + grantee_id = UUID(d.pop("grantee_id")) + + + + + share_in = cls( + tag_id=tag_id, + grantee_id=grantee_id, + ) + + + share_in.additional_properties = d + return share_in + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/kindred-sdk/personal_crm_client/models/tag_create.py b/kindred-sdk/personal_crm_client/models/tag_create.py new file mode 100644 index 00000000..7a4ace8d --- /dev/null +++ b/kindred-sdk/personal_crm_client/models/tag_create.py @@ -0,0 +1,99 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +from ..types import UNSET, Unset +from typing import cast + + + + + + +T = TypeVar("T", bound="TagCreate") + + + +@_attrs_define +class TagCreate: + """ + Attributes: + name (str): Tag name, 1-100 chars. + color (None | str | Unset): Optional hex color like #ff0000 for UI display. + """ + + name: str + color: None | str | Unset = UNSET + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + name = self.name + + color: None | str | Unset + if isinstance(self.color, Unset): + color = UNSET + else: + color = self.color + + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({ + "name": name, + }) + if color is not UNSET: + field_dict["color"] = color + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + name = d.pop("name") + + def _parse_color(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + color = _parse_color(d.pop("color", UNSET)) + + + tag_create = cls( + name=name, + color=color, + ) + + + tag_create.additional_properties = d + return tag_create + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/kindred-sdk/personal_crm_client/models/tag_public.py b/kindred-sdk/personal_crm_client/models/tag_public.py new file mode 100644 index 00000000..7d236dd1 --- /dev/null +++ b/kindred-sdk/personal_crm_client/models/tag_public.py @@ -0,0 +1,124 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +from ..types import UNSET, Unset +from dateutil.parser import isoparse +from typing import cast +from uuid import UUID +import datetime + + + + + + +T = TypeVar("T", bound="TagPublic") + + + +@_attrs_define +class TagPublic: + """ + Attributes: + name (str): Tag name, 1-100 chars. + id (UUID): + created_at (datetime.datetime): + color (None | str | Unset): Optional hex color like #ff0000 for UI display. + """ + + name: str + id: UUID + created_at: datetime.datetime + color: None | str | Unset = UNSET + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + name = self.name + + id = str(self.id) + + created_at = self.created_at.isoformat() + + color: None | str | Unset + if isinstance(self.color, Unset): + color = UNSET + else: + color = self.color + + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({ + "name": name, + "id": id, + "created_at": created_at, + }) + if color is not UNSET: + field_dict["color"] = color + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + name = d.pop("name") + + id = UUID(d.pop("id")) + + + + + created_at = isoparse(d.pop("created_at")) + + + + + def _parse_color(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + color = _parse_color(d.pop("color", UNSET)) + + + tag_public = cls( + name=name, + id=id, + created_at=created_at, + color=color, + ) + + + tag_public.additional_properties = d + return tag_public + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/kindred-sdk/personal_crm_client/models/tag_share_public.py b/kindred-sdk/personal_crm_client/models/tag_share_public.py new file mode 100644 index 00000000..f8b7072e --- /dev/null +++ b/kindred-sdk/personal_crm_client/models/tag_share_public.py @@ -0,0 +1,113 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +from dateutil.parser import isoparse +from typing import cast +from uuid import UUID +import datetime + + + + + + +T = TypeVar("T", bound="TagSharePublic") + + + +@_attrs_define +class TagSharePublic: + """ + Attributes: + tag_id (UUID): + grantee_id (UUID): + grantee_email (str): + created_at (datetime.datetime): + """ + + tag_id: UUID + grantee_id: UUID + grantee_email: str + created_at: datetime.datetime + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + tag_id = str(self.tag_id) + + grantee_id = str(self.grantee_id) + + grantee_email = self.grantee_email + + created_at = self.created_at.isoformat() + + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({ + "tag_id": tag_id, + "grantee_id": grantee_id, + "grantee_email": grantee_email, + "created_at": created_at, + }) + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + tag_id = UUID(d.pop("tag_id")) + + + + + grantee_id = UUID(d.pop("grantee_id")) + + + + + grantee_email = d.pop("grantee_email") + + created_at = isoparse(d.pop("created_at")) + + + + + tag_share_public = cls( + tag_id=tag_id, + grantee_id=grantee_id, + grantee_email=grantee_email, + created_at=created_at, + ) + + + tag_share_public.additional_properties = d + return tag_share_public + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/kindred-sdk/personal_crm_client/models/tag_shares_delete_tag_share_response_tag_shares_delete_tag_share.py b/kindred-sdk/personal_crm_client/models/tag_shares_delete_tag_share_response_tag_shares_delete_tag_share.py new file mode 100644 index 00000000..d1789a31 --- /dev/null +++ b/kindred-sdk/personal_crm_client/models/tag_shares_delete_tag_share_response_tag_shares_delete_tag_share.py @@ -0,0 +1,65 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + + + + + + + +T = TypeVar("T", bound="TagSharesDeleteTagShareResponseTagSharesDeleteTagShare") + + + +@_attrs_define +class TagSharesDeleteTagShareResponseTagSharesDeleteTagShare: + """ + """ + + additional_properties: dict[str, str] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + tag_shares_delete_tag_share_response_tag_shares_delete_tag_share = cls( + ) + + + tag_shares_delete_tag_share_response_tag_shares_delete_tag_share.additional_properties = d + return tag_shares_delete_tag_share_response_tag_shares_delete_tag_share + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> str: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: str) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/kindred-sdk/personal_crm_client/models/tag_shares_public.py b/kindred-sdk/personal_crm_client/models/tag_shares_public.py new file mode 100644 index 00000000..80a0da0d --- /dev/null +++ b/kindred-sdk/personal_crm_client/models/tag_shares_public.py @@ -0,0 +1,102 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +from typing import cast + +if TYPE_CHECKING: + from ..models.tag_share_public import TagSharePublic + + + + + +T = TypeVar("T", bound="TagSharesPublic") + + + +@_attrs_define +class TagSharesPublic: + """ + Attributes: + data (list[TagSharePublic]): + count (int): + """ + + data: list[TagSharePublic] + count: int + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + from ..models.tag_share_public import TagSharePublic + data = [] + for data_item_data in self.data: + data_item = data_item_data.to_dict() + data.append(data_item) + + + + count = self.count + + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({ + "data": data, + "count": count, + }) + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + from ..models.tag_share_public import TagSharePublic + d = dict(src_dict) + data = [] + _data = d.pop("data") + for data_item_data in (_data): + data_item = TagSharePublic.from_dict(data_item_data) + + + + data.append(data_item) + + + count = d.pop("count") + + tag_shares_public = cls( + data=data, + count=count, + ) + + + tag_shares_public.additional_properties = d + return tag_shares_public + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/kindred-sdk/personal_crm_client/models/tag_update.py b/kindred-sdk/personal_crm_client/models/tag_update.py new file mode 100644 index 00000000..507702ea --- /dev/null +++ b/kindred-sdk/personal_crm_client/models/tag_update.py @@ -0,0 +1,112 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +from ..types import UNSET, Unset +from typing import cast + + + + + + +T = TypeVar("T", bound="TagUpdate") + + + +@_attrs_define +class TagUpdate: + """ + Attributes: + name (None | str | Unset): + color (None | str | Unset): + """ + + name: None | str | Unset = UNSET + color: None | str | Unset = UNSET + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + name: None | str | Unset + if isinstance(self.name, Unset): + name = UNSET + else: + name = self.name + + color: None | str | Unset + if isinstance(self.color, Unset): + color = UNSET + else: + color = self.color + + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({ + }) + if name is not UNSET: + field_dict["name"] = name + if color is not UNSET: + field_dict["color"] = color + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + def _parse_name(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + name = _parse_name(d.pop("name", UNSET)) + + + def _parse_color(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + color = _parse_color(d.pop("color", UNSET)) + + + tag_update = cls( + name=name, + color=color, + ) + + + tag_update.additional_properties = d + return tag_update + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/kindred-sdk/personal_crm_client/models/tags_public.py b/kindred-sdk/personal_crm_client/models/tags_public.py new file mode 100644 index 00000000..13c72935 --- /dev/null +++ b/kindred-sdk/personal_crm_client/models/tags_public.py @@ -0,0 +1,102 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +from typing import cast + +if TYPE_CHECKING: + from ..models.tag_public import TagPublic + + + + + +T = TypeVar("T", bound="TagsPublic") + + + +@_attrs_define +class TagsPublic: + """ + Attributes: + data (list[TagPublic]): + count (int): + """ + + data: list[TagPublic] + count: int + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + from ..models.tag_public import TagPublic + data = [] + for data_item_data in self.data: + data_item = data_item_data.to_dict() + data.append(data_item) + + + + count = self.count + + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({ + "data": data, + "count": count, + }) + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + from ..models.tag_public import TagPublic + d = dict(src_dict) + data = [] + _data = d.pop("data") + for data_item_data in (_data): + data_item = TagPublic.from_dict(data_item_data) + + + + data.append(data_item) + + + count = d.pop("count") + + tags_public = cls( + data=data, + count=count, + ) + + + tags_public.additional_properties = d + return tags_public + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/kindred-sdk/personal_crm_client/models/token.py b/kindred-sdk/personal_crm_client/models/token.py new file mode 100644 index 00000000..b79bdd0b --- /dev/null +++ b/kindred-sdk/personal_crm_client/models/token.py @@ -0,0 +1,86 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +from ..types import UNSET, Unset + + + + + + +T = TypeVar("T", bound="Token") + + + +@_attrs_define +class Token: + """ + Attributes: + access_token (str): + token_type (str | Unset): Default: 'bearer'. + """ + + access_token: str + token_type: str | Unset = 'bearer' + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + access_token = self.access_token + + token_type = self.token_type + + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({ + "access_token": access_token, + }) + if token_type is not UNSET: + field_dict["token_type"] = token_type + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + access_token = d.pop("access_token") + + token_type = d.pop("token_type", UNSET) + + token = cls( + access_token=access_token, + token_type=token_type, + ) + + + token.additional_properties = d + return token + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/kindred-sdk/personal_crm_client/models/update_password.py b/kindred-sdk/personal_crm_client/models/update_password.py new file mode 100644 index 00000000..0119b5d7 --- /dev/null +++ b/kindred-sdk/personal_crm_client/models/update_password.py @@ -0,0 +1,84 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + + + + + + + +T = TypeVar("T", bound="UpdatePassword") + + + +@_attrs_define +class UpdatePassword: + """ + Attributes: + current_password (str): + new_password (str): + """ + + current_password: str + new_password: str + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + current_password = self.current_password + + new_password = self.new_password + + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({ + "current_password": current_password, + "new_password": new_password, + }) + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + current_password = d.pop("current_password") + + new_password = d.pop("new_password") + + update_password = cls( + current_password=current_password, + new_password=new_password, + ) + + + update_password.additional_properties = d + return update_password + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/kindred-sdk/personal_crm_client/models/user_create.py b/kindred-sdk/personal_crm_client/models/user_create.py new file mode 100644 index 00000000..8346c605 --- /dev/null +++ b/kindred-sdk/personal_crm_client/models/user_create.py @@ -0,0 +1,125 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +from ..types import UNSET, Unset +from typing import cast + + + + + + +T = TypeVar("T", bound="UserCreate") + + + +@_attrs_define +class UserCreate: + """ + Attributes: + email (str): Login email; must be unique. + password (str): + is_active (bool | Unset): Whether the account can log in. Default: True. + is_superuser (bool | Unset): Grants admin-only endpoints. Default: False. + full_name (None | str | Unset): Display name; optional. + """ + + email: str + password: str + is_active: bool | Unset = True + is_superuser: bool | Unset = False + full_name: None | str | Unset = UNSET + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + email = self.email + + password = self.password + + is_active = self.is_active + + is_superuser = self.is_superuser + + full_name: None | str | Unset + if isinstance(self.full_name, Unset): + full_name = UNSET + else: + full_name = self.full_name + + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({ + "email": email, + "password": password, + }) + if is_active is not UNSET: + field_dict["is_active"] = is_active + if is_superuser is not UNSET: + field_dict["is_superuser"] = is_superuser + if full_name is not UNSET: + field_dict["full_name"] = full_name + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + email = d.pop("email") + + password = d.pop("password") + + is_active = d.pop("is_active", UNSET) + + is_superuser = d.pop("is_superuser", UNSET) + + def _parse_full_name(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + full_name = _parse_full_name(d.pop("full_name", UNSET)) + + + user_create = cls( + email=email, + password=password, + is_active=is_active, + is_superuser=is_superuser, + full_name=full_name, + ) + + + user_create.additional_properties = d + return user_create + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/kindred-sdk/personal_crm_client/models/user_public.py b/kindred-sdk/personal_crm_client/models/user_public.py new file mode 100644 index 00000000..d082f6aa --- /dev/null +++ b/kindred-sdk/personal_crm_client/models/user_public.py @@ -0,0 +1,164 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +from ..types import UNSET, Unset +from dateutil.parser import isoparse +from typing import cast +from uuid import UUID +import datetime + + + + + + +T = TypeVar("T", bound="UserPublic") + + + +@_attrs_define +class UserPublic: + """ + Attributes: + email (str): Login email; must be unique. + id (UUID): + is_active (bool | Unset): Whether the account can log in. Default: True. + is_superuser (bool | Unset): Grants admin-only endpoints. Default: False. + full_name (None | str | Unset): Display name; optional. + created_at (datetime.datetime | None | Unset): + """ + + email: str + id: UUID + is_active: bool | Unset = True + is_superuser: bool | Unset = False + full_name: None | str | Unset = UNSET + created_at: datetime.datetime | None | Unset = UNSET + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + email = self.email + + id = str(self.id) + + is_active = self.is_active + + is_superuser = self.is_superuser + + full_name: None | str | Unset + if isinstance(self.full_name, Unset): + full_name = UNSET + else: + full_name = self.full_name + + created_at: None | str | Unset + if isinstance(self.created_at, Unset): + created_at = UNSET + elif isinstance(self.created_at, datetime.datetime): + created_at = self.created_at.isoformat() + else: + created_at = self.created_at + + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({ + "email": email, + "id": id, + }) + if is_active is not UNSET: + field_dict["is_active"] = is_active + if is_superuser is not UNSET: + field_dict["is_superuser"] = is_superuser + if full_name is not UNSET: + field_dict["full_name"] = full_name + if created_at is not UNSET: + field_dict["created_at"] = created_at + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + email = d.pop("email") + + id = UUID(d.pop("id")) + + + + + is_active = d.pop("is_active", UNSET) + + is_superuser = d.pop("is_superuser", UNSET) + + def _parse_full_name(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + full_name = _parse_full_name(d.pop("full_name", UNSET)) + + + def _parse_created_at(data: object) -> datetime.datetime | None | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + try: + if not isinstance(data, str): + raise TypeError() + created_at_type_0 = isoparse(data) + + + + return created_at_type_0 + except (TypeError, ValueError, AttributeError, KeyError): + pass + return cast(datetime.datetime | None | Unset, data) + + created_at = _parse_created_at(d.pop("created_at", UNSET)) + + + user_public = cls( + email=email, + id=id, + is_active=is_active, + is_superuser=is_superuser, + full_name=full_name, + created_at=created_at, + ) + + + user_public.additional_properties = d + return user_public + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/kindred-sdk/personal_crm_client/models/user_register.py b/kindred-sdk/personal_crm_client/models/user_register.py new file mode 100644 index 00000000..6322e761 --- /dev/null +++ b/kindred-sdk/personal_crm_client/models/user_register.py @@ -0,0 +1,107 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +from ..types import UNSET, Unset +from typing import cast + + + + + + +T = TypeVar("T", bound="UserRegister") + + + +@_attrs_define +class UserRegister: + """ + Attributes: + email (str): + password (str): + full_name (None | str | Unset): + """ + + email: str + password: str + full_name: None | str | Unset = UNSET + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + email = self.email + + password = self.password + + full_name: None | str | Unset + if isinstance(self.full_name, Unset): + full_name = UNSET + else: + full_name = self.full_name + + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({ + "email": email, + "password": password, + }) + if full_name is not UNSET: + field_dict["full_name"] = full_name + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + email = d.pop("email") + + password = d.pop("password") + + def _parse_full_name(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + full_name = _parse_full_name(d.pop("full_name", UNSET)) + + + user_register = cls( + email=email, + password=password, + full_name=full_name, + ) + + + user_register.additional_properties = d + return user_register + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/kindred-sdk/personal_crm_client/models/user_update.py b/kindred-sdk/personal_crm_client/models/user_update.py new file mode 100644 index 00000000..8b52c12f --- /dev/null +++ b/kindred-sdk/personal_crm_client/models/user_update.py @@ -0,0 +1,151 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +from ..types import UNSET, Unset +from typing import cast + + + + + + +T = TypeVar("T", bound="UserUpdate") + + + +@_attrs_define +class UserUpdate: + """ + Attributes: + email (None | str | Unset): + is_active (bool | Unset): Whether the account can log in. Default: True. + is_superuser (bool | Unset): Grants admin-only endpoints. Default: False. + full_name (None | str | Unset): Display name; optional. + password (None | str | Unset): + """ + + email: None | str | Unset = UNSET + is_active: bool | Unset = True + is_superuser: bool | Unset = False + full_name: None | str | Unset = UNSET + password: None | str | Unset = UNSET + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + email: None | str | Unset + if isinstance(self.email, Unset): + email = UNSET + else: + email = self.email + + is_active = self.is_active + + is_superuser = self.is_superuser + + full_name: None | str | Unset + if isinstance(self.full_name, Unset): + full_name = UNSET + else: + full_name = self.full_name + + password: None | str | Unset + if isinstance(self.password, Unset): + password = UNSET + else: + password = self.password + + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({ + }) + if email is not UNSET: + field_dict["email"] = email + if is_active is not UNSET: + field_dict["is_active"] = is_active + if is_superuser is not UNSET: + field_dict["is_superuser"] = is_superuser + if full_name is not UNSET: + field_dict["full_name"] = full_name + if password is not UNSET: + field_dict["password"] = password + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + def _parse_email(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + email = _parse_email(d.pop("email", UNSET)) + + + is_active = d.pop("is_active", UNSET) + + is_superuser = d.pop("is_superuser", UNSET) + + def _parse_full_name(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + full_name = _parse_full_name(d.pop("full_name", UNSET)) + + + def _parse_password(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + password = _parse_password(d.pop("password", UNSET)) + + + user_update = cls( + email=email, + is_active=is_active, + is_superuser=is_superuser, + full_name=full_name, + password=password, + ) + + + user_update.additional_properties = d + return user_update + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/kindred-sdk/personal_crm_client/models/user_update_me.py b/kindred-sdk/personal_crm_client/models/user_update_me.py new file mode 100644 index 00000000..7c9e842c --- /dev/null +++ b/kindred-sdk/personal_crm_client/models/user_update_me.py @@ -0,0 +1,112 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +from ..types import UNSET, Unset +from typing import cast + + + + + + +T = TypeVar("T", bound="UserUpdateMe") + + + +@_attrs_define +class UserUpdateMe: + """ + Attributes: + full_name (None | str | Unset): + email (None | str | Unset): + """ + + full_name: None | str | Unset = UNSET + email: None | str | Unset = UNSET + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + full_name: None | str | Unset + if isinstance(self.full_name, Unset): + full_name = UNSET + else: + full_name = self.full_name + + email: None | str | Unset + if isinstance(self.email, Unset): + email = UNSET + else: + email = self.email + + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({ + }) + if full_name is not UNSET: + field_dict["full_name"] = full_name + if email is not UNSET: + field_dict["email"] = email + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + def _parse_full_name(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + full_name = _parse_full_name(d.pop("full_name", UNSET)) + + + def _parse_email(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + email = _parse_email(d.pop("email", UNSET)) + + + user_update_me = cls( + full_name=full_name, + email=email, + ) + + + user_update_me.additional_properties = d + return user_update_me + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/kindred-sdk/personal_crm_client/models/users_public.py b/kindred-sdk/personal_crm_client/models/users_public.py new file mode 100644 index 00000000..9271a73d --- /dev/null +++ b/kindred-sdk/personal_crm_client/models/users_public.py @@ -0,0 +1,102 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +from typing import cast + +if TYPE_CHECKING: + from ..models.user_public import UserPublic + + + + + +T = TypeVar("T", bound="UsersPublic") + + + +@_attrs_define +class UsersPublic: + """ + Attributes: + data (list[UserPublic]): + count (int): + """ + + data: list[UserPublic] + count: int + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + from ..models.user_public import UserPublic + data = [] + for data_item_data in self.data: + data_item = data_item_data.to_dict() + data.append(data_item) + + + + count = self.count + + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({ + "data": data, + "count": count, + }) + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + from ..models.user_public import UserPublic + d = dict(src_dict) + data = [] + _data = d.pop("data") + for data_item_data in (_data): + data_item = UserPublic.from_dict(data_item_data) + + + + data.append(data_item) + + + count = d.pop("count") + + users_public = cls( + data=data, + count=count, + ) + + + users_public.additional_properties = d + return users_public + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/kindred-sdk/personal_crm_client/models/validation_error.py b/kindred-sdk/personal_crm_client/models/validation_error.py new file mode 100644 index 00000000..2769a32e --- /dev/null +++ b/kindred-sdk/personal_crm_client/models/validation_error.py @@ -0,0 +1,141 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +from ..types import UNSET, Unset +from typing import cast + +if TYPE_CHECKING: + from ..models.validation_error_context import ValidationErrorContext + + + + + +T = TypeVar("T", bound="ValidationError") + + + +@_attrs_define +class ValidationError: + """ + Attributes: + loc (list[int | str]): + msg (str): + type_ (str): + input_ (Any | Unset): + ctx (ValidationErrorContext | Unset): + """ + + loc: list[int | str] + msg: str + type_: str + input_: Any | Unset = UNSET + ctx: ValidationErrorContext | Unset = UNSET + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + from ..models.validation_error_context import ValidationErrorContext + loc = [] + for loc_item_data in self.loc: + loc_item: int | str + loc_item = loc_item_data + loc.append(loc_item) + + + + msg = self.msg + + type_ = self.type_ + + input_ = self.input_ + + ctx: dict[str, Any] | Unset = UNSET + if not isinstance(self.ctx, Unset): + ctx = self.ctx.to_dict() + + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({ + "loc": loc, + "msg": msg, + "type": type_, + }) + if input_ is not UNSET: + field_dict["input"] = input_ + if ctx is not UNSET: + field_dict["ctx"] = ctx + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + from ..models.validation_error_context import ValidationErrorContext + d = dict(src_dict) + loc = [] + _loc = d.pop("loc") + for loc_item_data in (_loc): + def _parse_loc_item(data: object) -> int | str: + return cast(int | str, data) + + loc_item = _parse_loc_item(loc_item_data) + + loc.append(loc_item) + + + msg = d.pop("msg") + + type_ = d.pop("type") + + input_ = d.pop("input", UNSET) + + _ctx = d.pop("ctx", UNSET) + ctx: ValidationErrorContext | Unset + if isinstance(_ctx, Unset): + ctx = UNSET + else: + ctx = ValidationErrorContext.from_dict(_ctx) + + + + + validation_error = cls( + loc=loc, + msg=msg, + type_=type_, + input_=input_, + ctx=ctx, + ) + + + validation_error.additional_properties = d + return validation_error + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/kindred-sdk/personal_crm_client/models/validation_error_context.py b/kindred-sdk/personal_crm_client/models/validation_error_context.py new file mode 100644 index 00000000..7a2888d8 --- /dev/null +++ b/kindred-sdk/personal_crm_client/models/validation_error_context.py @@ -0,0 +1,65 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + + + + + + + +T = TypeVar("T", bound="ValidationErrorContext") + + + +@_attrs_define +class ValidationErrorContext: + """ + """ + + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + validation_error_context = cls( + ) + + + validation_error_context.additional_properties = d + return validation_error_context + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/kindred-sdk/personal_crm_client/models/webhook_endpoint_base.py b/kindred-sdk/personal_crm_client/models/webhook_endpoint_base.py new file mode 100644 index 00000000..7cd13471 --- /dev/null +++ b/kindred-sdk/personal_crm_client/models/webhook_endpoint_base.py @@ -0,0 +1,158 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +from ..types import UNSET, Unset +from typing import cast + + + + + + +T = TypeVar("T", bound="WebhookEndpointBase") + + + +@_attrs_define +class WebhookEndpointBase: + """ + Attributes: + name (str): Human-readable endpoint name. + direction (str): "inbound" or "outbound". + url (None | str | Unset): Target URL for outbound webhooks; null for inbound. + event_types (None | str | Unset): Comma-separated event types (e.g. contact.created,interaction.logged). + is_active (bool | Unset): Enable or disable without deleting. Default: True. + secret (None | str | Unset): HMAC secret for verifying inbound payloads. + """ + + name: str + direction: str + url: None | str | Unset = UNSET + event_types: None | str | Unset = UNSET + is_active: bool | Unset = True + secret: None | str | Unset = UNSET + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + name = self.name + + direction = self.direction + + url: None | str | Unset + if isinstance(self.url, Unset): + url = UNSET + else: + url = self.url + + event_types: None | str | Unset + if isinstance(self.event_types, Unset): + event_types = UNSET + else: + event_types = self.event_types + + is_active = self.is_active + + secret: None | str | Unset + if isinstance(self.secret, Unset): + secret = UNSET + else: + secret = self.secret + + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({ + "name": name, + "direction": direction, + }) + if url is not UNSET: + field_dict["url"] = url + if event_types is not UNSET: + field_dict["event_types"] = event_types + if is_active is not UNSET: + field_dict["is_active"] = is_active + if secret is not UNSET: + field_dict["secret"] = secret + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + name = d.pop("name") + + direction = d.pop("direction") + + def _parse_url(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + url = _parse_url(d.pop("url", UNSET)) + + + def _parse_event_types(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + event_types = _parse_event_types(d.pop("event_types", UNSET)) + + + is_active = d.pop("is_active", UNSET) + + def _parse_secret(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + secret = _parse_secret(d.pop("secret", UNSET)) + + + webhook_endpoint_base = cls( + name=name, + direction=direction, + url=url, + event_types=event_types, + is_active=is_active, + secret=secret, + ) + + + webhook_endpoint_base.additional_properties = d + return webhook_endpoint_base + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/kindred-sdk/personal_crm_client/models/webhooks_inbound_webhook_payload.py b/kindred-sdk/personal_crm_client/models/webhooks_inbound_webhook_payload.py new file mode 100644 index 00000000..fafaf196 --- /dev/null +++ b/kindred-sdk/personal_crm_client/models/webhooks_inbound_webhook_payload.py @@ -0,0 +1,65 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + + + + + + + +T = TypeVar("T", bound="WebhooksInboundWebhookPayload") + + + +@_attrs_define +class WebhooksInboundWebhookPayload: + """ + """ + + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + webhooks_inbound_webhook_payload = cls( + ) + + + webhooks_inbound_webhook_payload.additional_properties = d + return webhooks_inbound_webhook_payload + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/kindred-sdk/personal_crm_client/py.typed b/kindred-sdk/personal_crm_client/py.typed new file mode 100644 index 00000000..1aad3271 --- /dev/null +++ b/kindred-sdk/personal_crm_client/py.typed @@ -0,0 +1 @@ +# Marker file for PEP 561 \ No newline at end of file diff --git a/kindred-sdk/personal_crm_client/types.py b/kindred-sdk/personal_crm_client/types.py new file mode 100644 index 00000000..f74db0ad --- /dev/null +++ b/kindred-sdk/personal_crm_client/types.py @@ -0,0 +1,53 @@ +""" Contains some shared types for properties """ + +from collections.abc import Mapping, MutableMapping +from http import HTTPStatus +from typing import BinaryIO, Generic, TypeVar, Literal, IO + +from attrs import define + + +class Unset: + def __bool__(self) -> Literal[False]: + return False + + +UNSET: Unset = Unset() + +# The types that `httpx.Client(files=)` can accept, copied from that library. +FileContent = IO[bytes] | bytes | str +FileTypes = ( + # (filename, file (or bytes), content_type) + tuple[str | None, FileContent, str | None] + # (filename, file (or bytes), content_type, headers) + | tuple[str | None, FileContent, str | None, Mapping[str, str]] +) +RequestFiles = list[tuple[str, FileTypes]] + +@define +class File: + """ Contains information for file uploads """ + + payload: BinaryIO + file_name: str | None = None + mime_type: str | None = None + + def to_tuple(self) -> FileTypes: + """ Return a tuple representation that httpx will accept for multipart/form-data """ + return self.file_name, self.payload, self.mime_type + + +T = TypeVar("T") + + +@define +class Response(Generic[T]): + """ A response from an endpoint """ + + status_code: HTTPStatus + content: bytes + headers: MutableMapping[str, str] + parsed: T | None + + +__all__ = ["UNSET", "File", "FileTypes", "RequestFiles", "Response", "Unset"] diff --git a/kindred-sdk/pyproject.toml b/kindred-sdk/pyproject.toml new file mode 100644 index 00000000..bb95d122 --- /dev/null +++ b/kindred-sdk/pyproject.toml @@ -0,0 +1,26 @@ +[tool.poetry] +name = "personal-crm-client" +version = "0.1.0" +description = "A client library for accessing Personal CRM" +authors = [] +readme = "README.md" +packages = [ + { include = "personal_crm_client" }, +] +include = ["personal_crm_client/py.typed"] + +[tool.poetry.dependencies] +python = "^3.10" +httpx = ">=0.23.0,<0.29.0" +attrs = ">=22.2.0" +python-dateutil = "^2.8.0" + +[build-system] +requires = ["poetry-core>=2.0.0,<3.0.0"] +build-backend = "poetry.core.masonry.api" + +[tool.ruff] +line-length = 120 + +[tool.ruff.lint] +select = ["F", "I", "UP"] diff --git a/openapi.json b/openapi.json new file mode 100644 index 00000000..8a7ce451 --- /dev/null +++ b/openapi.json @@ -0,0 +1 @@ +{"openapi":"3.1.0","info":{"title":"Personal CRM","version":"0.1.0"},"paths":{"/.well-known/carddav":{"get":{"tags":["carddav"],"summary":"Well Known Carddav","description":"Redirect to CardDAV server for iOS/macOS client discovery.","operationId":"carddav-well_known_carddav","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/login/access-token":{"post":{"tags":["login"],"summary":"Login Access Token","description":"OAuth2 compatible token login, get an access token for future requests","operationId":"login-login_access_token","requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_login-login_access_token"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Token"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/login/test-token":{"post":{"tags":["login"],"summary":"Test Token","description":"Test access token","operationId":"login-test_token","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserPublic"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/v1/password-recovery/{email}":{"post":{"tags":["login"],"summary":"Recover Password","description":"Password Recovery","operationId":"login-recover_password","parameters":[{"name":"email","in":"path","required":true,"schema":{"type":"string","title":"Email"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Message"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/reset-password/":{"post":{"tags":["login"],"summary":"Reset Password","description":"Reset password","operationId":"login-reset_password","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NewPassword"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Message"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/password-recovery-html-content/{email}":{"post":{"tags":["login"],"summary":"Recover Password Html Content","description":"HTML Content for Password Recovery","operationId":"login-recover_password_html_content","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"email","in":"path","required":true,"schema":{"type":"string","title":"Email"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/users/":{"get":{"tags":["users"],"summary":"Read Users","description":"Retrieve users.","operationId":"users-read_users","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"skip","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Skip"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UsersPublic"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["users"],"summary":"Create User","description":"Create new user.","operationId":"users-create_user","security":[{"OAuth2PasswordBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserPublic"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/users/me":{"get":{"tags":["users"],"summary":"Read User Me","description":"Get current user.","operationId":"users-read_user_me","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserPublic"}}}}},"security":[{"OAuth2PasswordBearer":[]}]},"delete":{"tags":["users"],"summary":"Delete User Me","description":"Delete own user.","operationId":"users-delete_user_me","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Message"}}}}},"security":[{"OAuth2PasswordBearer":[]}]},"patch":{"tags":["users"],"summary":"Update User Me","description":"Update own user.","operationId":"users-update_user_me","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserUpdateMe"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserPublic"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/v1/users/me/password":{"patch":{"tags":["users"],"summary":"Update Password Me","description":"Update own password.","operationId":"users-update_password_me","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdatePassword"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Message"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/v1/users/signup":{"post":{"tags":["users"],"summary":"Register User","description":"Create new user without the need to be logged in.","operationId":"users-register_user","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserRegister"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserPublic"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/users/{user_id}":{"get":{"tags":["users"],"summary":"Read User By Id","description":"Get a specific user by id.","operationId":"users-read_user_by_id","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserPublic"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["users"],"summary":"Update User","description":"Update a user.","operationId":"users-update_user","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"User Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserPublic"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["users"],"summary":"Delete User","description":"Delete a user.","operationId":"users-delete_user","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Message"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/utils/test-email/":{"post":{"tags":["utils"],"summary":"Test Email","description":"Test emails.","operationId":"utils-test_email","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"email_to","in":"query","required":true,"schema":{"type":"string","format":"email","title":"Email To"}}],"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Message"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/utils/health-check/":{"get":{"tags":["utils"],"summary":"Health Check","operationId":"utils-health_check","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"boolean","title":"Response Utils-Health Check"}}}}}}},"/api/v1/contacts/":{"get":{"tags":["contacts"],"summary":"List Contacts","description":"List contacts with filtering.\n\nPass `ids=&ids=` to fetch a specific batch of contacts (useful for\nhydrating references from other resources). When `ids` is provided, the default\n`is_archived=false` filter is lifted so callers can resolve archived rows too.\n\nSoft-deleted contacts (``deleted_at`` set) are hidden by default. Pass\n``include_deleted=true`` to surface them alongside live rows, or\n``only_deleted=true`` to fetch the trash view exclusively.","operationId":"contacts-list_contacts","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"skip","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Skip"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Search"}},{"name":"tag_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Tag Id"}},{"name":"group_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Group Id"}},{"name":"is_favorite","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Favorite"}},{"name":"is_archived","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Archived"}},{"name":"stage","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stage"}},{"name":"include_deleted","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Include Deleted"}},{"name":"only_deleted","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Only Deleted"}},{"name":"ids","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string","format":"uuid"}},{"type":"null"}],"title":"Ids"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactsPublic"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["contacts"],"summary":"Create Contact","description":"Create a new contact.","operationId":"contacts-create_contact","security":[{"OAuth2PasswordBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactPublic"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/contacts/losing-touch":{"get":{"tags":["contacts"],"summary":"List Losing Touch","description":"Return contacts whose cadence has been exceeded.\n\nA contact is 'losing touch' if:\n- contact_frequency_days is set\n- last_contacted_at is NULL or older than contact_frequency_days ago","operationId":"contacts-list_losing_touch","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":20,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactsPublic"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/contacts/{contact_id}":{"get":{"tags":["contacts"],"summary":"Get Contact","description":"Get a single contact by ID.","operationId":"contacts-get_contact","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"contact_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Contact Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactPublic"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["contacts"],"summary":"Update Contact","description":"Update a contact.","operationId":"contacts-update_contact","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"contact_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Contact Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactPublic"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["contacts"],"summary":"Delete Contact","description":"Soft-delete a contact.\n\nSets ``deleted_at`` instead of removing the row, so the contact and its\nrelated data (notes, interactions, addresses, etc.) can be restored. Use\n``POST /contacts/{id}/restore`` to recover, or pass ``only_deleted=true``\nto ``GET /contacts/`` to view the trash.","operationId":"contacts-delete_contact","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"contact_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Contact Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"title":"Response Contacts-Delete Contact"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/contacts/{contact_id}/mentions":{"get":{"tags":["contacts"],"summary":"List Contact Mentions","description":"List notes that @-mention this contact, with the source (authoring) contact.","operationId":"contacts-list_contact_mentions","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"contact_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Contact Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/NoteMentionPublic"},"title":"Response Contacts-List Contact Mentions"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/contacts/{contact_id}/restore":{"post":{"tags":["contacts"],"summary":"Restore Contact","description":"Restore a soft-deleted contact (clear ``deleted_at``).","operationId":"contacts-restore_contact","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"contact_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Contact Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactPublic"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/contacts/{contact_id}/household":{"get":{"tags":["contacts"],"summary":"Get Contact Household","description":"Get household members for a contact.\n\nDerives household/family members via BFS walk of relationships\n(spouse, child, parent, sibling, etc.). Returns names and ages.","operationId":"contacts-get_contact_household","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"contact_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Contact Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"title":"Response Contacts-Get Contact Household"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/tags/":{"get":{"tags":["tags"],"summary":"List Tags","description":"List all tags for the current user.","operationId":"tags-list_tags","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"skip","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Skip"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TagsPublic"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["tags"],"summary":"Create Tag Route","description":"Create a new tag.","operationId":"tags-create_tag_route","security":[{"OAuth2PasswordBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TagCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TagPublic"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/tags/{tag_id}":{"patch":{"tags":["tags"],"summary":"Update Tag","description":"Update a tag.","operationId":"tags-update_tag","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"tag_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Tag Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TagUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TagPublic"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["tags"],"summary":"Delete Tag","description":"Delete a tag.","operationId":"tags-delete_tag","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"tag_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Tag Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"title":"Response Tags-Delete Tag"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/tag-shares/":{"post":{"tags":["tag-shares"],"summary":"Create Tag Share","operationId":"tag-shares-create_tag_share","security":[{"OAuth2PasswordBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/_ShareIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TagSharePublic"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["tag-shares"],"summary":"List Tag Shares","operationId":"tag-shares-list_tag_shares","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"tag_id","in":"query","required":true,"schema":{"type":"string","format":"uuid","title":"Tag Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TagSharesPublic"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/tag-shares/{tag_id}/{grantee_id}":{"delete":{"tags":["tag-shares"],"summary":"Delete Tag Share","operationId":"tag-shares-delete_tag_share","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"tag_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Tag Id"}},{"name":"grantee_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Grantee Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"string"},"title":"Response Tag-Shares-Delete Tag Share"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/groups/":{"get":{"tags":["groups"],"summary":"List Groups","description":"List all groups for the current user.","operationId":"groups-list_groups","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"skip","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Skip"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupsPublic"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["groups"],"summary":"Create Group Route","description":"Create a new group.","operationId":"groups-create_group_route","security":[{"OAuth2PasswordBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupPublic"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/groups/{group_id}":{"patch":{"tags":["groups"],"summary":"Update Group","description":"Update a group.","operationId":"groups-update_group","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Group Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupPublic"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["groups"],"summary":"Delete Group","description":"Delete a group.","operationId":"groups-delete_group","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Group Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"title":"Response Groups-Delete Group"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/contact-fields/contact/{contact_id}":{"get":{"tags":["contact-fields"],"summary":"List Contact Fields","description":"List all fields for a contact.","operationId":"contact-fields-list_contact_fields","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"contact_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Contact Id"}},{"name":"skip","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Skip"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"title":"Response Contact-Fields-List Contact Fields"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/contact-fields/":{"post":{"tags":["contact-fields"],"summary":"Create Contact Field Route","description":"Create a new contact field.","operationId":"contact-fields-create_contact_field_route","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactFieldCreate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactFieldPublic"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/v1/contact-fields/{field_id}":{"patch":{"tags":["contact-fields"],"summary":"Update Contact Field","description":"Update a contact field.","operationId":"contact-fields-update_contact_field","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"field_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Field Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactFieldUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactFieldPublic"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["contact-fields"],"summary":"Delete Contact Field","description":"Delete a contact field.","operationId":"contact-fields-delete_contact_field","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"field_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Field Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"title":"Response Contact-Fields-Delete Contact Field"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/addresses/contact/{contact_id}":{"get":{"tags":["addresses"],"summary":"List Addresses","description":"List all addresses for a contact.","operationId":"addresses-list_addresses","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"contact_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Contact Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"title":"Response Addresses-List Addresses"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/addresses/":{"post":{"tags":["addresses"],"summary":"Create Address Route","description":"Create a new address.","operationId":"addresses-create_address_route","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddressCreate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddressPublic"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/v1/addresses/{address_id}":{"patch":{"tags":["addresses"],"summary":"Update Address","description":"Update an address.","operationId":"addresses-update_address","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"address_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Address Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddressUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddressPublic"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["addresses"],"summary":"Delete Address","description":"Delete an address.","operationId":"addresses-delete_address","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"address_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Address Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"title":"Response Addresses-Delete Address"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/relationships/inverse":{"get":{"tags":["relationships"],"summary":"Lookup Inverse","description":"Return the inferred inverse for a relationship type, or null.\n\nThe frontend calls this before saving to decide whether to prompt\nthe user for the inverse. Symmetric types (\"friend\") return\nthemselves; asymmetric pairs (\"parent\") return their counterpart\n(\"child\"); unknown types return null so the UI can ask.","operationId":"relationships-lookup_inverse","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"type","in":"query","required":true,"schema":{"type":"string","minLength":1,"maxLength":100,"title":"Type"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":{"anyOf":[{"type":"string"},{"type":"null"}]},"title":"Response Relationships-Lookup Inverse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/relationships/contact/{contact_id}":{"get":{"tags":["relationships"],"summary":"List Relationships","description":"List relationships for a contact.","operationId":"relationships-list_relationships","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"contact_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Contact Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"title":"Response Relationships-List Relationships"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/relationships/":{"post":{"tags":["relationships"],"summary":"Create Relationship Route","description":"Create a relationship plus its inverse so both contacts stay symmetric.","operationId":"relationships-create_relationship_route","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RelationshipCreate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RelationshipPublic"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/v1/relationships/{rel_id}":{"patch":{"tags":["relationships"],"summary":"Update Relationship","description":"Update a relationship.\n\nOnly the row addressed by ``rel_id`` is touched; the paired\ninverse row is left as-is so asymmetric pairs (parent/child) can\ndiverge intentionally. Edit each side from its own contact page\nif you want them to stay matched.","operationId":"relationships-update_relationship","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"rel_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Rel Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RelationshipUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RelationshipPublic"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["relationships"],"summary":"Delete Relationship","description":"Delete a relationship and its paired inverse row.","operationId":"relationships-delete_relationship","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"rel_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Rel Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"title":"Response Relationships-Delete Relationship"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/pets/contact/{contact_id}":{"get":{"tags":["pets"],"summary":"List Pets","description":"List pets for a contact.","operationId":"pets-list_pets","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"contact_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Contact Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"title":"Response Pets-List Pets"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/pets/":{"post":{"tags":["pets"],"summary":"Create Pet Route","description":"Create a new pet.","operationId":"pets-create_pet_route","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PetCreate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PetPublic"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/v1/pets/{pet_id}":{"patch":{"tags":["pets"],"summary":"Update Pet","description":"Update a pet.","operationId":"pets-update_pet","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"pet_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Pet Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PetUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PetPublic"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["pets"],"summary":"Delete Pet","description":"Delete a pet.","operationId":"pets-delete_pet","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"pet_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Pet Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"title":"Response Pets-Delete Pet"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/custom-fields/definitions/":{"get":{"tags":["custom-fields"],"summary":"List Field Definitions","description":"List all custom field definitions for the user.","operationId":"custom-fields-list_field_definitions","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"title":"Response Custom-Fields-List Field Definitions"}}}}},"security":[{"OAuth2PasswordBearer":[]}]},"post":{"tags":["custom-fields"],"summary":"Create Field Definition","description":"Create a new custom field definition.","operationId":"custom-fields-create_field_definition","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomFieldDefinitionCreate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomFieldDefinitionPublic"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/v1/custom-fields/definitions/{def_id}":{"patch":{"tags":["custom-fields"],"summary":"Update Field Definition","description":"Update a custom field definition.","operationId":"custom-fields-update_field_definition","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"def_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Def Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomFieldDefinitionUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomFieldDefinitionPublic"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["custom-fields"],"summary":"Delete Field Definition","description":"Delete a custom field definition.","operationId":"custom-fields-delete_field_definition","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"def_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Def Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"title":"Response Custom-Fields-Delete Field Definition"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/custom-fields/values/contact/{contact_id}":{"get":{"tags":["custom-fields"],"summary":"List Field Values","description":"List custom field values for a contact.","operationId":"custom-fields-list_field_values","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"contact_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Contact Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"title":"Response Custom-Fields-List Field Values"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/custom-fields/values/":{"post":{"tags":["custom-fields"],"summary":"Create Field Value","description":"Create a custom field value for a contact.","operationId":"custom-fields-create_field_value","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomFieldValueCreate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomFieldValuePublic"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/v1/custom-fields/values/{value_id}":{"patch":{"tags":["custom-fields"],"summary":"Update Field Value","description":"Update a custom field value.","operationId":"custom-fields-update_field_value","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"value_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Value Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomFieldValueUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomFieldValuePublic"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["custom-fields"],"summary":"Delete Field Value","description":"Delete a custom field value.","operationId":"custom-fields-delete_field_value","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"value_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Value Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"title":"Response Custom-Fields-Delete Field Value"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/interactions/":{"get":{"tags":["interactions"],"summary":"List Interactions","description":"List interactions. Pass ``contact_id`` to filter by attendee.","operationId":"interactions-list_interactions","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"contact_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Contact Id"}},{"name":"skip","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Skip"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InteractionsPublic"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["interactions"],"summary":"Create Interaction Route","description":"Create a new interaction with one or more attendees.","operationId":"interactions-create_interaction_route","security":[{"OAuth2PasswordBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InteractionCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InteractionPublic"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/interactions/{interaction_id}":{"patch":{"tags":["interactions"],"summary":"Update Interaction","description":"Update an interaction; ``attendee_ids`` replaces the attendee set.","operationId":"interactions-update_interaction","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"interaction_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Interaction Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InteractionUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InteractionPublic"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["interactions"],"summary":"Delete Interaction","description":"Delete an interaction and recompute each attendee's last_contacted_at.","operationId":"interactions-delete_interaction","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"interaction_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Interaction Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"title":"Response Interactions-Delete Interaction"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/reminders/":{"get":{"tags":["reminders"],"summary":"List Reminders","description":"List reminders for the current user (owned + tied to visible contacts).","operationId":"reminders-list_reminders","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"skip","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Skip"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}},{"name":"is_active","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RemindersPublic"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["reminders"],"summary":"Create Reminder Route","description":"Create a new reminder.","operationId":"reminders-create_reminder_route","security":[{"OAuth2PasswordBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReminderCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReminderPublic"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/reminders/{reminder_id}":{"patch":{"tags":["reminders"],"summary":"Update Reminder","description":"Update a reminder.","operationId":"reminders-update_reminder","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"reminder_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Reminder Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReminderUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReminderPublic"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["reminders"],"summary":"Delete Reminder","description":"Delete a reminder.","operationId":"reminders-delete_reminder","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"reminder_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Reminder Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"title":"Response Reminders-Delete Reminder"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/reminders/{reminder_id}/snooze":{"post":{"tags":["reminders"],"summary":"Snooze Reminder","description":"Snooze a reminder.","operationId":"reminders-snooze_reminder","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"reminder_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Reminder Id"}},{"name":"minutes","in":"query","required":false,"schema":{"type":"integer","default":30,"title":"Minutes"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"title":"Response Reminders-Snooze Reminder"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/gifts/contact/{contact_id}":{"get":{"tags":["gifts"],"summary":"List Gifts","description":"List gifts for a contact.","operationId":"gifts-list_gifts","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"contact_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Contact Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GiftsPublic"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/gifts/":{"post":{"tags":["gifts"],"summary":"Create Gift Route","description":"Create a new gift.","operationId":"gifts-create_gift_route","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GiftCreate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GiftPublic"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/v1/gifts/{gift_id}":{"patch":{"tags":["gifts"],"summary":"Update Gift","description":"Update a gift.","operationId":"gifts-update_gift","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"gift_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Gift Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GiftUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GiftPublic"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["gifts"],"summary":"Delete Gift","description":"Delete a gift.","operationId":"gifts-delete_gift","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"gift_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Gift Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"title":"Response Gifts-Delete Gift"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/debts/contact/{contact_id}":{"get":{"tags":["debts"],"summary":"List Debts","description":"List debts for a contact.","operationId":"debts-list_debts","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"contact_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Contact Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DebtsPublic"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/debts/":{"post":{"tags":["debts"],"summary":"Create Debt Route","description":"Create a new debt.","operationId":"debts-create_debt_route","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DebtCreate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DebtPublic"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/v1/debts/{debt_id}":{"patch":{"tags":["debts"],"summary":"Update Debt","description":"Update a debt.","operationId":"debts-update_debt","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"debt_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Debt Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DebtUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DebtPublic"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["debts"],"summary":"Delete Debt","description":"Delete a debt.","operationId":"debts-delete_debt","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"debt_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Debt Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"title":"Response Debts-Delete Debt"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/life-events/contact/{contact_id}":{"get":{"tags":["life-events"],"summary":"List Life Events","description":"List life events for a contact.","operationId":"life-events-list_life_events","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"contact_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Contact Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LifeEventsPublic"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/life-events/":{"post":{"tags":["life-events"],"summary":"Create Life Event Route","description":"Create a new life event.","operationId":"life-events-create_life_event_route","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LifeEventCreate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LifeEventPublic"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/v1/life-events/{event_id}":{"patch":{"tags":["life-events"],"summary":"Update Life Event","description":"Update a life event.","operationId":"life-events-update_life_event","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"event_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Event Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LifeEventUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LifeEventPublic"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["life-events"],"summary":"Delete Life Event","description":"Delete a life event.","operationId":"life-events-delete_life_event","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"event_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Event Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"title":"Response Life-Events-Delete Life Event"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/notes/contact/{contact_id}":{"get":{"tags":["notes"],"summary":"List Notes","description":"List notes for a contact.","operationId":"notes-list_notes","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"contact_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Contact Id"}},{"name":"skip","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Skip"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotesPublic"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/notes/":{"post":{"tags":["notes"],"summary":"Create Note Route","description":"Create a new note.","operationId":"notes-create_note_route","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NoteCreate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotePublic"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/v1/notes/{note_id}":{"patch":{"tags":["notes"],"summary":"Update Note Route","description":"Update a note.","operationId":"notes-update_note_route","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"note_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Note Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NoteUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotePublic"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["notes"],"summary":"Delete Note","description":"Delete a note.","operationId":"notes-delete_note","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"note_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Note Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"title":"Response Notes-Delete Note"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/media-recommendations/contact/{contact_id}":{"get":{"tags":["media-recommendations"],"summary":"List Media Recommendations","description":"List media recommendations for a contact.","operationId":"media-recommendations-list_media_recommendations","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"contact_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Contact Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MediaRecommendationsPublic"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/media-recommendations/":{"post":{"tags":["media-recommendations"],"summary":"Create Media Recommendation Route","description":"Create a new media recommendation.","operationId":"media-recommendations-create_media_recommendation_route","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MediaRecommendationCreate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MediaRecommendationPublic"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/v1/media-recommendations/{rec_id}":{"patch":{"tags":["media-recommendations"],"summary":"Update Media Recommendation","description":"Update a media recommendation.","operationId":"media-recommendations-update_media_recommendation","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"rec_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Rec Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MediaRecommendationUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MediaRecommendationPublic"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["media-recommendations"],"summary":"Delete Media Recommendation","description":"Delete a media recommendation.","operationId":"media-recommendations-delete_media_recommendation","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"rec_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Rec Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"title":"Response Media-Recommendations-Delete Media Recommendation"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/journal/":{"get":{"tags":["journal"],"summary":"List Journal Entries","description":"List journal entries for the current user.","operationId":"journal-list_journal_entries","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"skip","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Skip"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JournalEntriesPublic"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["journal"],"summary":"Create Journal Entry Route","description":"Create a new journal entry.","operationId":"journal-create_journal_entry_route","security":[{"OAuth2PasswordBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JournalEntryCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JournalEntryPublic"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/journal/{entry_id}":{"patch":{"tags":["journal"],"summary":"Update Journal Entry","description":"Update a journal entry.","operationId":"journal-update_journal_entry","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"entry_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Entry Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JournalEntryUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JournalEntryPublic"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["journal"],"summary":"Delete Journal Entry","description":"Delete a journal entry.","operationId":"journal-delete_journal_entry","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"entry_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Entry Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"title":"Response Journal-Delete Journal Entry"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/import-export/import/vcard":{"post":{"tags":["import-export"],"summary":"Import Vcard","description":"Import contacts from a .vcf file (supports multiple vCards in one file).","operationId":"import-export-import_vcard","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_import-export-import_vcard"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"title":"Response Import-Export-Import Vcard"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/v1/import-export/export/vcard":{"get":{"tags":["import-export"],"summary":"Export Vcard","description":"Export all contacts as a single .vcf file.","operationId":"import-export-export_vcard","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"title":"Response Import-Export-Export Vcard"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/v1/import-export/export/json":{"get":{"tags":["import-export"],"summary":"Export Json","description":"Export all data as JSON.","operationId":"import-export-export_json","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"title":"Response Import-Export-Export Json"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/v1/webhooks/":{"get":{"tags":["webhooks"],"summary":"List Webhooks","description":"List all webhook endpoints for the user.","operationId":"webhooks-list_webhooks","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"title":"Response Webhooks-List Webhooks"}}}}},"security":[{"OAuth2PasswordBearer":[]}]},"post":{"tags":["webhooks"],"summary":"Create Webhook","description":"Create a new webhook endpoint.","operationId":"webhooks-create_webhook","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookEndpointBase"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"title":"Response Webhooks-Create Webhook"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/v1/webhooks/{webhook_id}":{"patch":{"tags":["webhooks"],"summary":"Update Webhook","description":"Update a webhook endpoint.","operationId":"webhooks-update_webhook","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"webhook_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Webhook Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookEndpointBase"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"title":"Response Webhooks-Update Webhook"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["webhooks"],"summary":"Delete Webhook","description":"Delete a webhook endpoint.","operationId":"webhooks-delete_webhook","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"webhook_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Webhook Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"title":"Response Webhooks-Delete Webhook"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/webhooks/inbound/{api_key}":{"post":{"tags":["webhooks"],"summary":"Inbound Webhook","description":"Inbound webhook receiver for external integrations (n8n, Aqara, etc.).\n\nPayload format:\n{\n \"contact_email\": \"user@example.com\", // OR\n \"contact_name\": \"John Doe\", // lookup by name\n \"channel\": \"call\", // InteractionChannel value\n \"notes\": \"Called about project X\", // optional\n \"occurred_at\": \"2024-01-15T10:00:00Z\" // optional, defaults to now\n}","operationId":"webhooks-inbound_webhook","parameters":[{"name":"api_key","in":"path","required":true,"schema":{"type":"string","title":"Api Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Payload"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"title":"Response Webhooks-Inbound Webhook"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/activity-logs/":{"get":{"tags":["activity-logs"],"summary":"List Activity Logs","description":"Return activity log entries for entities visible to the current user.\n\nOwned logs (any entity type) are always included. Contact-entity logs are\nalso included when the contact is visible via a TagShare grant.","operationId":"activity-logs-list_activity_logs","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"entity_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Entity Type"}},{"name":"entity_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Entity Id"}},{"name":"tag_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Tag Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ActivityLogsPublic"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/calendar/month/{yyyy_mm}":{"get":{"tags":["calendar"],"summary":"Get Calendar Month","operationId":"calendar-get_calendar_month","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"yyyy_mm","in":"path","required":true,"schema":{"type":"string","title":"Yyyy Mm"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CalendarMonthResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/private/users/":{"post":{"tags":["private"],"summary":"Create User","description":"Create a new user.","operationId":"private-create_user","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PrivateUserCreate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserPublic"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"ActivityLogPublic":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"owner_id":{"type":"string","format":"uuid","title":"Owner Id"},"actor_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Actor Id"},"entity_type":{"type":"string","title":"Entity Type"},"entity_id":{"type":"string","format":"uuid","title":"Entity Id"},"action":{"type":"string","title":"Action"},"changes_json":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Changes Json"},"occurred_at":{"type":"string","format":"date-time","title":"Occurred At"}},"type":"object","required":["id","owner_id","actor_id","entity_type","entity_id","action","changes_json","occurred_at"],"title":"ActivityLogPublic"},"ActivityLogsPublic":{"properties":{"data":{"items":{"$ref":"#/components/schemas/ActivityLogPublic"},"type":"array","title":"Data"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["data","count"],"title":"ActivityLogsPublic"},"AddressCreate":{"properties":{"label":{"type":"string","maxLength":100,"title":"Label","description":"Label like \"home\", \"work\", \"other\".","default":"home"},"street":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Street","description":"Street line 1."},"extended":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Extended","description":"Apartment, suite, floor, etc."},"city":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"City","description":"City."},"region":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Region","description":"State, province, or region."},"postal_code":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Postal Code","description":"ZIP or postal code."},"country":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Country","description":"Country."},"latitude":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Latitude","description":"Geocoded latitude; used for map visualization."},"longitude":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Longitude","description":"Geocoded longitude; used for map visualization."},"contact_id":{"type":"string","format":"uuid","title":"Contact Id"}},"type":"object","required":["contact_id"],"title":"AddressCreate"},"AddressPublic":{"properties":{"label":{"type":"string","maxLength":100,"title":"Label","description":"Label like \"home\", \"work\", \"other\".","default":"home"},"street":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Street","description":"Street line 1."},"extended":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Extended","description":"Apartment, suite, floor, etc."},"city":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"City","description":"City."},"region":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Region","description":"State, province, or region."},"postal_code":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Postal Code","description":"ZIP or postal code."},"country":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Country","description":"Country."},"latitude":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Latitude","description":"Geocoded latitude; used for map visualization."},"longitude":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Longitude","description":"Geocoded longitude; used for map visualization."},"id":{"type":"string","format":"uuid","title":"Id"},"contact_id":{"type":"string","format":"uuid","title":"Contact Id"}},"type":"object","required":["id","contact_id"],"title":"AddressPublic"},"AddressUpdate":{"properties":{"label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Label"},"street":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Street"},"extended":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Extended"},"city":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"City"},"region":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Region"},"postal_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Postal Code"},"country":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Country"},"latitude":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Latitude"},"longitude":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Longitude"}},"type":"object","title":"AddressUpdate"},"Body_import-export-import_vcard":{"properties":{"file":{"type":"string","format":"binary","title":"File"}},"type":"object","required":["file"],"title":"Body_import-export-import_vcard"},"Body_login-login_access_token":{"properties":{"grant_type":{"anyOf":[{"type":"string","pattern":"^password$"},{"type":"null"}],"title":"Grant Type"},"username":{"type":"string","title":"Username"},"password":{"type":"string","format":"password","title":"Password"},"scope":{"type":"string","title":"Scope","default":""},"client_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Client Id"},"client_secret":{"anyOf":[{"type":"string"},{"type":"null"}],"format":"password","title":"Client Secret"}},"type":"object","required":["username","password"],"title":"Body_login-login_access_token"},"CalendarEntry":{"properties":{"contact_id":{"type":"string","format":"uuid","title":"Contact Id"},"name":{"type":"string","title":"Name"},"type":{"type":"string","title":"Type"},"age":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Age"}},"type":"object","required":["contact_id","name","type","age"],"title":"CalendarEntry"},"CalendarMonthResponse":{"properties":{"month":{"type":"string","title":"Month"},"days":{"additionalProperties":{"items":{"$ref":"#/components/schemas/CalendarEntry"},"type":"array"},"type":"object","title":"Days"}},"type":"object","required":["month","days"],"title":"CalendarMonthResponse"},"ContactCreate":{"properties":{"first_name":{"type":"string","maxLength":255,"minLength":1,"title":"First Name","description":"Given name; required."},"last_name":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Last Name","description":"Family name."},"middle_name":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Middle Name","description":"Middle name or initial."},"prefix":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Prefix","description":"Honorific like Dr., Mr., Ms."},"suffix":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Suffix","description":"Suffix like Jr., PhD."},"nickname":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Nickname","description":"Preferred or informal name."},"company":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Company","description":"Organization name."},"department":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Department","description":"Department within the company."},"title":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Title","description":"Job title."},"birthday":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Birthday","description":"Date of birth; used for milestone and birthday reminders."},"how_we_met":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"How We Met","description":"Short story of how the introduction happened."},"is_favorite":{"type":"boolean","title":"Is Favorite","description":"Pinned to the top of contact lists.","default":false},"is_archived":{"type":"boolean","title":"Is Archived","description":"Soft-deleted; excluded from default lists.","default":false},"is_deceased":{"type":"boolean","title":"Is Deceased","description":"Marks the contact as deceased.","default":false},"deceased_at":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Deceased At","description":"Date the contact passed away."},"contact_frequency_days":{"anyOf":[{"type":"integer","maximum":3650.0,"minimum":1.0},{"type":"null"}],"title":"Contact Frequency Days","description":"Target days between interactions; drives losing-touch cadence."},"stage":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Stage","description":"Kanban stage like Active, Dormant, Lost."},"tag_ids":{"anyOf":[{"items":{"type":"string","format":"uuid"},"type":"array"},{"type":"null"}],"title":"Tag Ids"},"group_ids":{"anyOf":[{"items":{"type":"string","format":"uuid"},"type":"array"},{"type":"null"}],"title":"Group Ids"}},"type":"object","required":["first_name"],"title":"ContactCreate"},"ContactFieldCreate":{"properties":{"field_type":{"$ref":"#/components/schemas/ContactFieldType","description":"Kind of contact info (email or phone)."},"label":{"type":"string","maxLength":100,"title":"Label","description":"Label like \"home\", \"work\", \"cell\", \"twitter\"."},"value":{"type":"string","maxLength":2048,"minLength":1,"title":"Value","description":"The actual email address, phone number, etc."},"is_primary":{"type":"boolean","title":"Is Primary","description":"Marks the primary entry for this field_type on the contact.","default":false},"sort_order":{"type":"integer","title":"Sort Order","description":"Display order within the same field_type.","default":0},"contact_id":{"type":"string","format":"uuid","title":"Contact Id"}},"type":"object","required":["field_type","label","value","contact_id"],"title":"ContactFieldCreate"},"ContactFieldPublic":{"properties":{"field_type":{"$ref":"#/components/schemas/ContactFieldType","description":"Kind of contact info (email or phone)."},"label":{"type":"string","maxLength":100,"title":"Label","description":"Label like \"home\", \"work\", \"cell\", \"twitter\"."},"value":{"type":"string","maxLength":2048,"minLength":1,"title":"Value","description":"The actual email address, phone number, etc."},"is_primary":{"type":"boolean","title":"Is Primary","description":"Marks the primary entry for this field_type on the contact.","default":false},"sort_order":{"type":"integer","title":"Sort Order","description":"Display order within the same field_type.","default":0},"id":{"type":"string","format":"uuid","title":"Id"},"contact_id":{"type":"string","format":"uuid","title":"Contact Id"}},"type":"object","required":["field_type","label","value","id","contact_id"],"title":"ContactFieldPublic"},"ContactFieldType":{"type":"string","enum":["email","phone"],"title":"ContactFieldType"},"ContactFieldUpdate":{"properties":{"field_type":{"anyOf":[{"$ref":"#/components/schemas/ContactFieldType"},{"type":"null"}]},"label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Label"},"value":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Value"},"is_primary":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Primary"},"sort_order":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Sort Order"}},"type":"object","title":"ContactFieldUpdate"},"ContactPublic":{"properties":{"first_name":{"type":"string","maxLength":255,"minLength":1,"title":"First Name","description":"Given name; required."},"last_name":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Last Name","description":"Family name."},"middle_name":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Middle Name","description":"Middle name or initial."},"prefix":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Prefix","description":"Honorific like Dr., Mr., Ms."},"suffix":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Suffix","description":"Suffix like Jr., PhD."},"nickname":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Nickname","description":"Preferred or informal name."},"company":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Company","description":"Organization name."},"department":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Department","description":"Department within the company."},"title":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Title","description":"Job title."},"birthday":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Birthday","description":"Date of birth; used for milestone and birthday reminders."},"how_we_met":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"How We Met","description":"Short story of how the introduction happened."},"is_favorite":{"type":"boolean","title":"Is Favorite","description":"Pinned to the top of contact lists.","default":false},"is_archived":{"type":"boolean","title":"Is Archived","description":"Soft-deleted; excluded from default lists.","default":false},"is_deceased":{"type":"boolean","title":"Is Deceased","description":"Marks the contact as deceased.","default":false},"deceased_at":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Deceased At","description":"Date the contact passed away."},"contact_frequency_days":{"anyOf":[{"type":"integer","maximum":3650.0,"minimum":1.0},{"type":"null"}],"title":"Contact Frequency Days","description":"Target days between interactions; drives losing-touch cadence."},"stage":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Stage","description":"Kanban stage like Active, Dormant, Lost."},"id":{"type":"string","format":"uuid","title":"Id"},"avatar_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Avatar Url"},"last_contacted_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Contacted At"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"deleted_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Deleted At"},"tags":{"items":{"$ref":"#/components/schemas/TagPublic"},"type":"array","title":"Tags","default":[]},"groups":{"items":{"$ref":"#/components/schemas/GroupPublic"},"type":"array","title":"Groups","default":[]}},"type":"object","required":["first_name","id","avatar_url","last_contacted_at","created_at","updated_at"],"title":"ContactPublic"},"ContactUpdate":{"properties":{"first_name":{"anyOf":[{"type":"string","maxLength":255,"minLength":1},{"type":"null"}],"title":"First Name"},"last_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Name"},"middle_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Middle Name"},"prefix":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Prefix"},"suffix":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Suffix"},"nickname":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Nickname"},"company":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company"},"department":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Department"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"birthday":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Birthday"},"how_we_met":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"How We Met"},"is_favorite":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Favorite"},"is_archived":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Archived"},"is_deceased":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Deceased"},"deceased_at":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Deceased At"},"contact_frequency_days":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Contact Frequency Days"},"stage":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stage"},"tag_ids":{"anyOf":[{"items":{"type":"string","format":"uuid"},"type":"array"},{"type":"null"}],"title":"Tag Ids"},"group_ids":{"anyOf":[{"items":{"type":"string","format":"uuid"},"type":"array"},{"type":"null"}],"title":"Group Ids"}},"type":"object","title":"ContactUpdate"},"ContactsPublic":{"properties":{"data":{"items":{"$ref":"#/components/schemas/ContactPublic"},"type":"array","title":"Data"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["data","count"],"title":"ContactsPublic"},"CustomFieldDefinitionCreate":{"properties":{"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name","description":"Custom field name shown in the UI."},"field_type":{"type":"string","maxLength":50,"title":"Field Type","description":"Field type: text, number, date, boolean, or select.","default":"text"},"description":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Description","description":"Help text displayed alongside the field in the UI."},"options":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Options","description":"Comma-separated options for field_type=\"select\"."},"icon":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Icon","description":"Icon slug for the UI (e.g. \"heart\", \"book\")."}},"type":"object","required":["name"],"title":"CustomFieldDefinitionCreate"},"CustomFieldDefinitionPublic":{"properties":{"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name","description":"Custom field name shown in the UI."},"field_type":{"type":"string","maxLength":50,"title":"Field Type","description":"Field type: text, number, date, boolean, or select.","default":"text"},"description":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Description","description":"Help text displayed alongside the field in the UI."},"options":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Options","description":"Comma-separated options for field_type=\"select\"."},"icon":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Icon","description":"Icon slug for the UI (e.g. \"heart\", \"book\")."},"id":{"type":"string","format":"uuid","title":"Id"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["name","id","created_at"],"title":"CustomFieldDefinitionPublic"},"CustomFieldDefinitionUpdate":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"field_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Field Type"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"options":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Options"},"icon":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Icon"}},"type":"object","title":"CustomFieldDefinitionUpdate"},"CustomFieldValueCreate":{"properties":{"value":{"type":"string","maxLength":5000,"title":"Value","description":"Value as a string; coerced from the declared field_type."},"contact_id":{"type":"string","format":"uuid","title":"Contact Id"},"field_definition_id":{"type":"string","format":"uuid","title":"Field Definition Id"}},"type":"object","required":["value","contact_id","field_definition_id"],"title":"CustomFieldValueCreate"},"CustomFieldValuePublic":{"properties":{"value":{"type":"string","maxLength":5000,"title":"Value","description":"Value as a string; coerced from the declared field_type."},"id":{"type":"string","format":"uuid","title":"Id"},"contact_id":{"type":"string","format":"uuid","title":"Contact Id"},"field_definition_id":{"type":"string","format":"uuid","title":"Field Definition Id"},"field_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Field Name"}},"type":"object","required":["value","id","contact_id","field_definition_id"],"title":"CustomFieldValuePublic"},"CustomFieldValueUpdate":{"properties":{"value":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Value"}},"type":"object","title":"CustomFieldValueUpdate"},"DebtCreate":{"properties":{"direction":{"$ref":"#/components/schemas/DebtDirection","description":"Who owes whom: i_owe (you owe them) or they_owe (they owe you)."},"amount":{"type":"number","exclusiveMinimum":0.0,"title":"Amount","description":"Amount owed; must be greater than zero."},"currency":{"type":"string","maxLength":3,"title":"Currency","description":"ISO 4217 currency code.","default":"USD"},"reason":{"anyOf":[{"type":"string","maxLength":1000},{"type":"null"}],"title":"Reason","description":"What the debt is for."},"is_settled":{"type":"boolean","title":"Is Settled","description":"Marked paid off.","default":false},"settled_at":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Settled At","description":"Date the debt was settled."},"contact_id":{"type":"string","format":"uuid","title":"Contact Id"}},"type":"object","required":["direction","amount","contact_id"],"title":"DebtCreate"},"DebtDirection":{"type":"string","enum":["i_owe","they_owe"],"title":"DebtDirection"},"DebtPublic":{"properties":{"direction":{"$ref":"#/components/schemas/DebtDirection","description":"Who owes whom: i_owe (you owe them) or they_owe (they owe you)."},"amount":{"type":"number","exclusiveMinimum":0.0,"title":"Amount","description":"Amount owed; must be greater than zero."},"currency":{"type":"string","maxLength":3,"title":"Currency","description":"ISO 4217 currency code.","default":"USD"},"reason":{"anyOf":[{"type":"string","maxLength":1000},{"type":"null"}],"title":"Reason","description":"What the debt is for."},"is_settled":{"type":"boolean","title":"Is Settled","description":"Marked paid off.","default":false},"settled_at":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Settled At","description":"Date the debt was settled."},"id":{"type":"string","format":"uuid","title":"Id"},"contact_id":{"type":"string","format":"uuid","title":"Contact Id"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["direction","amount","id","contact_id","created_at"],"title":"DebtPublic"},"DebtUpdate":{"properties":{"direction":{"anyOf":[{"$ref":"#/components/schemas/DebtDirection"},{"type":"null"}]},"amount":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Amount"},"currency":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Currency"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason"},"is_settled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Settled"},"settled_at":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Settled At"}},"type":"object","title":"DebtUpdate"},"DebtsPublic":{"properties":{"data":{"items":{"$ref":"#/components/schemas/DebtPublic"},"type":"array","title":"Data"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["data","count"],"title":"DebtsPublic"},"GiftCreate":{"properties":{"name":{"type":"string","maxLength":500,"minLength":1,"title":"Name","description":"Gift name."},"description":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Description","description":"Details about the gift."},"status":{"$ref":"#/components/schemas/GiftStatus","description":"Lifecycle: idea, given, or received.","default":"idea"},"occasion":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Occasion","description":"Occasion like Birthday, Christmas, Housewarming."},"gift_date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Gift Date","description":"When the gift was given or received."},"value_amount":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Value Amount","description":"Monetary cost or value."},"value_currency":{"type":"string","maxLength":3,"title":"Value Currency","description":"ISO 4217 currency code.","default":"USD"},"url":{"anyOf":[{"type":"string","maxLength":2048},{"type":"null"}],"title":"Url","description":"Link to the product page (e.g. Amazon)."},"contact_id":{"type":"string","format":"uuid","title":"Contact Id"}},"type":"object","required":["name","contact_id"],"title":"GiftCreate"},"GiftPublic":{"properties":{"name":{"type":"string","maxLength":500,"minLength":1,"title":"Name","description":"Gift name."},"description":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Description","description":"Details about the gift."},"status":{"$ref":"#/components/schemas/GiftStatus","description":"Lifecycle: idea, given, or received.","default":"idea"},"occasion":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Occasion","description":"Occasion like Birthday, Christmas, Housewarming."},"gift_date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Gift Date","description":"When the gift was given or received."},"value_amount":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Value Amount","description":"Monetary cost or value."},"value_currency":{"type":"string","maxLength":3,"title":"Value Currency","description":"ISO 4217 currency code.","default":"USD"},"url":{"anyOf":[{"type":"string","maxLength":2048},{"type":"null"}],"title":"Url","description":"Link to the product page (e.g. Amazon)."},"id":{"type":"string","format":"uuid","title":"Id"},"contact_id":{"type":"string","format":"uuid","title":"Contact Id"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["name","id","contact_id","created_at"],"title":"GiftPublic"},"GiftStatus":{"type":"string","enum":["idea","given","received"],"title":"GiftStatus"},"GiftUpdate":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"status":{"anyOf":[{"$ref":"#/components/schemas/GiftStatus"},{"type":"null"}]},"occasion":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Occasion"},"gift_date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Gift Date"},"value_amount":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Value Amount"},"value_currency":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Value Currency"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url"}},"type":"object","title":"GiftUpdate"},"GiftsPublic":{"properties":{"data":{"items":{"$ref":"#/components/schemas/GiftPublic"},"type":"array","title":"Data"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["data","count"],"title":"GiftsPublic"},"GroupCreate":{"properties":{"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name","description":"Group name, 1-255 chars."},"description":{"anyOf":[{"type":"string","maxLength":1000},{"type":"null"}],"title":"Description","description":"Optional group description."}},"type":"object","required":["name"],"title":"GroupCreate"},"GroupPublic":{"properties":{"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name","description":"Group name, 1-255 chars."},"description":{"anyOf":[{"type":"string","maxLength":1000},{"type":"null"}],"title":"Description","description":"Optional group description."},"id":{"type":"string","format":"uuid","title":"Id"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["name","id","created_at"],"title":"GroupPublic"},"GroupUpdate":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":255,"minLength":1},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"}},"type":"object","title":"GroupUpdate"},"GroupsPublic":{"properties":{"data":{"items":{"$ref":"#/components/schemas/GroupPublic"},"type":"array","title":"Data"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["data","count"],"title":"GroupsPublic"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"InteractionAttendeeSummary":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"first_name":{"type":"string","title":"First Name"},"last_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Name"},"avatar_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Avatar Url"}},"type":"object","required":["id","first_name"],"title":"InteractionAttendeeSummary"},"InteractionChannel":{"type":"string","enum":["call","in_person","text","email","video","social","other"],"title":"InteractionChannel"},"InteractionCreate":{"properties":{"channel":{"$ref":"#/components/schemas/InteractionChannel","description":"How the interaction happened (call, in_person, text, etc.)."},"occurred_at":{"type":"string","format":"date-time","title":"Occurred At","description":"When the interaction actually took place."},"notes":{"anyOf":[{"type":"string","maxLength":10000},{"type":"null"}],"title":"Notes","description":"Conversation summary, action items, etc."},"mood":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Mood","description":"Emoji or keyword capturing the tone."},"duration_minutes":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Duration Minutes","description":"Length of the interaction in minutes."},"attendee_ids":{"items":{"type":"string","format":"uuid"},"type":"array","minItems":1,"title":"Attendee Ids","description":"Contacts that attended; must have at least one."}},"type":"object","required":["channel","occurred_at","attendee_ids"],"title":"InteractionCreate"},"InteractionPublic":{"properties":{"channel":{"$ref":"#/components/schemas/InteractionChannel","description":"How the interaction happened (call, in_person, text, etc.)."},"occurred_at":{"type":"string","format":"date-time","title":"Occurred At","description":"When the interaction actually took place."},"notes":{"anyOf":[{"type":"string","maxLength":10000},{"type":"null"}],"title":"Notes","description":"Conversation summary, action items, etc."},"mood":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Mood","description":"Emoji or keyword capturing the tone."},"duration_minutes":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Duration Minutes","description":"Length of the interaction in minutes."},"id":{"type":"string","format":"uuid","title":"Id"},"attendees":{"items":{"$ref":"#/components/schemas/InteractionAttendeeSummary"},"type":"array","title":"Attendees","default":[]},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["channel","occurred_at","id","created_at"],"title":"InteractionPublic"},"InteractionUpdate":{"properties":{"channel":{"anyOf":[{"$ref":"#/components/schemas/InteractionChannel"},{"type":"null"}]},"occurred_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Occurred At"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"},"mood":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mood"},"duration_minutes":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Duration Minutes"},"attendee_ids":{"anyOf":[{"items":{"type":"string","format":"uuid"},"type":"array","minItems":1},{"type":"null"}],"title":"Attendee Ids","description":"Replace the attendee set; must have at least one if provided."}},"type":"object","title":"InteractionUpdate"},"InteractionsPublic":{"properties":{"data":{"items":{"$ref":"#/components/schemas/InteractionPublic"},"type":"array","title":"Data"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["data","count"],"title":"InteractionsPublic"},"JournalEntriesPublic":{"properties":{"data":{"items":{"$ref":"#/components/schemas/JournalEntryPublic"},"type":"array","title":"Data"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["data","count"],"title":"JournalEntriesPublic"},"JournalEntryCreate":{"properties":{"body":{"type":"string","maxLength":50000,"minLength":1,"title":"Body","description":"Entry body, 1-50000 chars."},"mood":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Mood","description":"Emoji or keyword capturing the mood."},"entry_date":{"type":"string","format":"date","title":"Entry Date","description":"Date the entry is about (may differ from created_at)."}},"type":"object","required":["body","entry_date"],"title":"JournalEntryCreate"},"JournalEntryPublic":{"properties":{"body":{"type":"string","maxLength":50000,"minLength":1,"title":"Body","description":"Entry body, 1-50000 chars."},"mood":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Mood","description":"Emoji or keyword capturing the mood."},"entry_date":{"type":"string","format":"date","title":"Entry Date","description":"Date the entry is about (may differ from created_at)."},"id":{"type":"string","format":"uuid","title":"Id"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["body","entry_date","id","created_at","updated_at"],"title":"JournalEntryPublic"},"JournalEntryUpdate":{"properties":{"body":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Body"},"mood":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mood"},"entry_date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Entry Date"}},"type":"object","title":"JournalEntryUpdate"},"LifeEventCreate":{"properties":{"event_type":{"type":"string","maxLength":100,"title":"Event Type","description":"Kind of milestone: job_change, move, wedding, baby, graduation, birthday, anniversary, etc."},"title":{"type":"string","maxLength":500,"minLength":1,"title":"Title","description":"Event title."},"description":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Description","description":"Extra details about the event."},"occurred_at":{"type":"string","format":"date","title":"Occurred At","description":"Date the event happened."},"create_annual_reminder":{"type":"boolean","title":"Create Annual Reminder","description":"If true, auto-create a yearly recurring reminder on this date.","default":false},"contact_id":{"type":"string","format":"uuid","title":"Contact Id"}},"type":"object","required":["event_type","title","occurred_at","contact_id"],"title":"LifeEventCreate"},"LifeEventPublic":{"properties":{"event_type":{"type":"string","maxLength":100,"title":"Event Type","description":"Kind of milestone: job_change, move, wedding, baby, graduation, birthday, anniversary, etc."},"title":{"type":"string","maxLength":500,"minLength":1,"title":"Title","description":"Event title."},"description":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Description","description":"Extra details about the event."},"occurred_at":{"type":"string","format":"date","title":"Occurred At","description":"Date the event happened."},"create_annual_reminder":{"type":"boolean","title":"Create Annual Reminder","description":"If true, auto-create a yearly recurring reminder on this date.","default":false},"id":{"type":"string","format":"uuid","title":"Id"},"contact_id":{"type":"string","format":"uuid","title":"Contact Id"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["event_type","title","occurred_at","id","contact_id","created_at"],"title":"LifeEventPublic"},"LifeEventUpdate":{"properties":{"event_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Event Type"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"occurred_at":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Occurred At"},"create_annual_reminder":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Create Annual Reminder"}},"type":"object","title":"LifeEventUpdate"},"LifeEventsPublic":{"properties":{"data":{"items":{"$ref":"#/components/schemas/LifeEventPublic"},"type":"array","title":"Data"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["data","count"],"title":"LifeEventsPublic"},"MediaCategory":{"type":"string","enum":["movie","tv_show","podcast","musician","book","other"],"title":"MediaCategory"},"MediaRecommendationCreate":{"properties":{"category":{"$ref":"#/components/schemas/MediaCategory","description":"Media category: movie, tv_show, podcast, musician, book, or other."},"title":{"type":"string","maxLength":500,"minLength":1,"title":"Title","description":"Title of the work."},"creator":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Creator","description":"Author, director, artist, or similar creator."},"note":{"anyOf":[{"type":"string","maxLength":5000},{"type":"null"}],"title":"Note","description":"Why it was recommended or personal reaction."},"recommended_at":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Recommended At","description":"Date the recommendation was made."},"contact_id":{"type":"string","format":"uuid","title":"Contact Id"}},"type":"object","required":["category","title","contact_id"],"title":"MediaRecommendationCreate"},"MediaRecommendationPublic":{"properties":{"category":{"$ref":"#/components/schemas/MediaCategory","description":"Media category: movie, tv_show, podcast, musician, book, or other."},"title":{"type":"string","maxLength":500,"minLength":1,"title":"Title","description":"Title of the work."},"creator":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Creator","description":"Author, director, artist, or similar creator."},"note":{"anyOf":[{"type":"string","maxLength":5000},{"type":"null"}],"title":"Note","description":"Why it was recommended or personal reaction."},"recommended_at":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Recommended At","description":"Date the recommendation was made."},"id":{"type":"string","format":"uuid","title":"Id"},"contact_id":{"type":"string","format":"uuid","title":"Contact Id"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["category","title","id","contact_id","created_at","updated_at"],"title":"MediaRecommendationPublic"},"MediaRecommendationUpdate":{"properties":{"category":{"anyOf":[{"$ref":"#/components/schemas/MediaCategory"},{"type":"null"}]},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"creator":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Creator"},"note":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Note"},"recommended_at":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Recommended At"}},"type":"object","title":"MediaRecommendationUpdate"},"MediaRecommendationsPublic":{"properties":{"data":{"items":{"$ref":"#/components/schemas/MediaRecommendationPublic"},"type":"array","title":"Data"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["data","count"],"title":"MediaRecommendationsPublic"},"Message":{"properties":{"message":{"type":"string","title":"Message"}},"type":"object","required":["message"],"title":"Message"},"NewPassword":{"properties":{"token":{"type":"string","title":"Token"},"new_password":{"type":"string","maxLength":128,"minLength":8,"title":"New Password"}},"type":"object","required":["token","new_password"],"title":"NewPassword"},"NoteCreate":{"properties":{"body":{"type":"string","maxLength":50000,"minLength":1,"title":"Body","description":"Note body, 1-50000 chars."},"contact_id":{"type":"string","format":"uuid","title":"Contact Id"}},"type":"object","required":["body","contact_id"],"title":"NoteCreate"},"NoteMentionPublic":{"properties":{"note_id":{"type":"string","format":"uuid","title":"Note Id"},"note_body":{"type":"string","title":"Note Body"},"note_created_at":{"type":"string","format":"date-time","title":"Note Created At"},"source_contact":{"$ref":"#/components/schemas/_MentionSourceContact"}},"type":"object","required":["note_id","note_body","note_created_at","source_contact"],"title":"NoteMentionPublic"},"NotePublic":{"properties":{"body":{"type":"string","maxLength":50000,"minLength":1,"title":"Body","description":"Note body, 1-50000 chars."},"id":{"type":"string","format":"uuid","title":"Id"},"contact_id":{"type":"string","format":"uuid","title":"Contact Id"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["body","id","contact_id","created_at","updated_at"],"title":"NotePublic"},"NoteUpdate":{"properties":{"body":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Body"}},"type":"object","title":"NoteUpdate"},"NotesPublic":{"properties":{"data":{"items":{"$ref":"#/components/schemas/NotePublic"},"type":"array","title":"Data"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["data","count"],"title":"NotesPublic"},"PetCreate":{"properties":{"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name","description":"Pet's name."},"species":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Species","description":"Species like dog, cat, bird."},"breed":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Breed","description":"Breed, if known."},"notes":{"anyOf":[{"type":"string","maxLength":1000},{"type":"null"}],"title":"Notes","description":"Freeform notes (e.g. allergies, birthday)."},"contact_id":{"type":"string","format":"uuid","title":"Contact Id"}},"type":"object","required":["name","contact_id"],"title":"PetCreate"},"PetPublic":{"properties":{"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name","description":"Pet's name."},"species":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Species","description":"Species like dog, cat, bird."},"breed":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Breed","description":"Breed, if known."},"notes":{"anyOf":[{"type":"string","maxLength":1000},{"type":"null"}],"title":"Notes","description":"Freeform notes (e.g. allergies, birthday)."},"id":{"type":"string","format":"uuid","title":"Id"},"contact_id":{"type":"string","format":"uuid","title":"Contact Id"}},"type":"object","required":["name","id","contact_id"],"title":"PetPublic"},"PetUpdate":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":255,"minLength":1},{"type":"null"}],"title":"Name"},"species":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Species"},"breed":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Breed"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"}},"type":"object","title":"PetUpdate"},"PrivateUserCreate":{"properties":{"email":{"type":"string","title":"Email"},"password":{"type":"string","title":"Password"},"full_name":{"type":"string","title":"Full Name"},"is_verified":{"type":"boolean","title":"Is Verified","default":false}},"type":"object","required":["email","password","full_name"],"title":"PrivateUserCreate"},"RelationshipCreate":{"properties":{"relationship_type":{"type":"string","maxLength":100,"title":"Relationship Type","description":"Kind of relationship: spouse, child, parent, sibling, friend, colleague, etc."},"notes":{"anyOf":[{"type":"string","maxLength":1000},{"type":"null"}],"title":"Notes","description":"Additional context about the relationship."},"contact_id":{"type":"string","format":"uuid","title":"Contact Id"},"related_contact_id":{"type":"string","format":"uuid","title":"Related Contact Id"},"inverse_relationship_type":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Inverse Relationship Type","description":"Type for the auto-generated inverse row. If omitted, the server infers it from a known map of symmetric/asymmetric types and returns 422 when it cannot."}},"type":"object","required":["relationship_type","contact_id","related_contact_id"],"title":"RelationshipCreate"},"RelationshipPublic":{"properties":{"relationship_type":{"type":"string","maxLength":100,"title":"Relationship Type","description":"Kind of relationship: spouse, child, parent, sibling, friend, colleague, etc."},"notes":{"anyOf":[{"type":"string","maxLength":1000},{"type":"null"}],"title":"Notes","description":"Additional context about the relationship."},"id":{"type":"string","format":"uuid","title":"Id"},"contact_id":{"type":"string","format":"uuid","title":"Contact Id"},"related_contact_id":{"type":"string","format":"uuid","title":"Related Contact Id"},"inverse_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Inverse Id"}},"type":"object","required":["relationship_type","id","contact_id","related_contact_id"],"title":"RelationshipPublic"},"RelationshipUpdate":{"properties":{"relationship_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Relationship Type"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"}},"type":"object","title":"RelationshipUpdate"},"ReminderCreate":{"properties":{"title":{"type":"string","maxLength":500,"minLength":1,"title":"Title","description":"Reminder title."},"description":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Description","description":"Extra details shown with the reminder."},"remind_at":{"type":"string","format":"date-time","title":"Remind At","description":"When to fire the reminder."},"frequency":{"$ref":"#/components/schemas/ReminderFrequency","description":"How often the reminder repeats.","default":"once"},"is_active":{"type":"boolean","title":"Is Active","description":"Enable or disable without deleting.","default":true},"contact_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Contact Id"}},"type":"object","required":["title","remind_at"],"title":"ReminderCreate"},"ReminderFrequency":{"type":"string","enum":["once","daily","weekly","monthly","yearly"],"title":"ReminderFrequency"},"ReminderPublic":{"properties":{"title":{"type":"string","maxLength":500,"minLength":1,"title":"Title","description":"Reminder title."},"description":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Description","description":"Extra details shown with the reminder."},"remind_at":{"type":"string","format":"date-time","title":"Remind At","description":"When to fire the reminder."},"frequency":{"$ref":"#/components/schemas/ReminderFrequency","description":"How often the reminder repeats.","default":"once"},"is_active":{"type":"boolean","title":"Is Active","description":"Enable or disable without deleting.","default":true},"id":{"type":"string","format":"uuid","title":"Id"},"contact_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Contact Id"},"last_sent_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Sent At"},"snoozed_until":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Snoozed Until"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["title","remind_at","id","contact_id","last_sent_at","snoozed_until","created_at"],"title":"ReminderPublic"},"ReminderUpdate":{"properties":{"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"remind_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Remind At"},"frequency":{"anyOf":[{"$ref":"#/components/schemas/ReminderFrequency"},{"type":"null"}]},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"}},"type":"object","title":"ReminderUpdate"},"RemindersPublic":{"properties":{"data":{"items":{"$ref":"#/components/schemas/ReminderPublic"},"type":"array","title":"Data"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["data","count"],"title":"RemindersPublic"},"TagCreate":{"properties":{"name":{"type":"string","maxLength":100,"minLength":1,"title":"Name","description":"Tag name, 1-100 chars."},"color":{"anyOf":[{"type":"string","maxLength":7},{"type":"null"}],"title":"Color","description":"Optional hex color like #ff0000 for UI display."}},"type":"object","required":["name"],"title":"TagCreate"},"TagPublic":{"properties":{"name":{"type":"string","maxLength":100,"minLength":1,"title":"Name","description":"Tag name, 1-100 chars."},"color":{"anyOf":[{"type":"string","maxLength":7},{"type":"null"}],"title":"Color","description":"Optional hex color like #ff0000 for UI display."},"id":{"type":"string","format":"uuid","title":"Id"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["name","id","created_at"],"title":"TagPublic"},"TagSharePublic":{"properties":{"tag_id":{"type":"string","format":"uuid","title":"Tag Id"},"grantee_id":{"type":"string","format":"uuid","title":"Grantee Id"},"grantee_email":{"type":"string","title":"Grantee Email"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["tag_id","grantee_id","grantee_email","created_at"],"title":"TagSharePublic"},"TagSharesPublic":{"properties":{"data":{"items":{"$ref":"#/components/schemas/TagSharePublic"},"type":"array","title":"Data"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["data","count"],"title":"TagSharesPublic"},"TagUpdate":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":100,"minLength":1},{"type":"null"}],"title":"Name"},"color":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Color"}},"type":"object","title":"TagUpdate"},"TagsPublic":{"properties":{"data":{"items":{"$ref":"#/components/schemas/TagPublic"},"type":"array","title":"Data"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["data","count"],"title":"TagsPublic"},"Token":{"properties":{"access_token":{"type":"string","title":"Access Token"},"token_type":{"type":"string","title":"Token Type","default":"bearer"}},"type":"object","required":["access_token"],"title":"Token"},"UpdatePassword":{"properties":{"current_password":{"type":"string","maxLength":128,"minLength":8,"title":"Current Password"},"new_password":{"type":"string","maxLength":128,"minLength":8,"title":"New Password"}},"type":"object","required":["current_password","new_password"],"title":"UpdatePassword"},"UserCreate":{"properties":{"email":{"type":"string","maxLength":255,"format":"email","title":"Email","description":"Login email; must be unique."},"is_active":{"type":"boolean","title":"Is Active","description":"Whether the account can log in.","default":true},"is_superuser":{"type":"boolean","title":"Is Superuser","description":"Grants admin-only endpoints.","default":false},"full_name":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Full Name","description":"Display name; optional."},"password":{"type":"string","maxLength":128,"minLength":8,"title":"Password"}},"type":"object","required":["email","password"],"title":"UserCreate"},"UserPublic":{"properties":{"email":{"type":"string","maxLength":255,"format":"email","title":"Email","description":"Login email; must be unique."},"is_active":{"type":"boolean","title":"Is Active","description":"Whether the account can log in.","default":true},"is_superuser":{"type":"boolean","title":"Is Superuser","description":"Grants admin-only endpoints.","default":false},"full_name":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Full Name","description":"Display name; optional."},"id":{"type":"string","format":"uuid","title":"Id"},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"}},"type":"object","required":["email","id"],"title":"UserPublic"},"UserRegister":{"properties":{"email":{"type":"string","maxLength":255,"format":"email","title":"Email"},"password":{"type":"string","maxLength":128,"minLength":8,"title":"Password"},"full_name":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Full Name"}},"type":"object","required":["email","password"],"title":"UserRegister"},"UserUpdate":{"properties":{"email":{"anyOf":[{"type":"string","maxLength":255,"format":"email"},{"type":"null"}],"title":"Email"},"is_active":{"type":"boolean","title":"Is Active","description":"Whether the account can log in.","default":true},"is_superuser":{"type":"boolean","title":"Is Superuser","description":"Grants admin-only endpoints.","default":false},"full_name":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Full Name","description":"Display name; optional."},"password":{"anyOf":[{"type":"string","maxLength":128,"minLength":8},{"type":"null"}],"title":"Password"}},"type":"object","title":"UserUpdate"},"UserUpdateMe":{"properties":{"full_name":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Full Name"},"email":{"anyOf":[{"type":"string","maxLength":255,"format":"email"},{"type":"null"}],"title":"Email"}},"type":"object","title":"UserUpdateMe"},"UsersPublic":{"properties":{"data":{"items":{"$ref":"#/components/schemas/UserPublic"},"type":"array","title":"Data"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["data","count"],"title":"UsersPublic"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"WebhookEndpointBase":{"properties":{"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name","description":"Human-readable endpoint name."},"url":{"anyOf":[{"type":"string","maxLength":2048},{"type":"null"}],"title":"Url","description":"Target URL for outbound webhooks; null for inbound."},"direction":{"type":"string","maxLength":10,"title":"Direction","description":"\"inbound\" or \"outbound\"."},"event_types":{"anyOf":[{"type":"string","maxLength":1000},{"type":"null"}],"title":"Event Types","description":"Comma-separated event types (e.g. contact.created,interaction.logged)."},"is_active":{"type":"boolean","title":"Is Active","description":"Enable or disable without deleting.","default":true},"secret":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Secret","description":"HMAC secret for verifying inbound payloads."}},"type":"object","required":["name","direction"],"title":"WebhookEndpointBase"},"_MentionSourceContact":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"first_name":{"type":"string","title":"First Name"},"last_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Name"},"avatar_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Avatar Url"}},"type":"object","required":["id","first_name"],"title":"_MentionSourceContact"},"_ShareIn":{"properties":{"tag_id":{"type":"string","format":"uuid","title":"Tag Id"},"grantee_id":{"type":"string","format":"uuid","title":"Grantee Id"}},"type":"object","required":["tag_id","grantee_id"],"title":"_ShareIn"}},"securitySchemes":{"OAuth2PasswordBearer":{"type":"oauth2","flows":{"password":{"scopes":{},"tokenUrl":"/api/v1/login/access-token"}}}}}} \ No newline at end of file From 49fcfcee7759f8435b761cf60e49492546a077ea Mon Sep 17 00:00:00 2001 From: Will Pike <6687499+pike00@users.noreply.github.com> Date: Sun, 3 May 2026 16:48:45 -0500 Subject: [PATCH 2/3] WIP: dirac autorun for kindred-sdk (error) --- kind | 249 ++++++++-------- kindred | 42 +-- kindred-sdk/README.md | 179 ++++++------ kindred-sdk/kindred_sdk/client.py | 101 +++++++ .../kindred_sdk/resources/activity_logs.py | 51 ++++ .../kindred_sdk/resources/addresses.py | 128 ++++++--- kindred-sdk/kindred_sdk/resources/calendar.py | 38 +++ kindred-sdk/kindred_sdk/resources/contacts.py | 271 ++++++++++++++++++ kindred-sdk/kindred_sdk/resources/debts.py | 128 ++++++--- kindred-sdk/kindred_sdk/resources/gifts.py | 128 ++++++--- .../kindred_sdk/resources/interactions.py | 137 ++++++--- kindred-sdk/kindred_sdk/resources/journal.py | 124 +++++--- .../kindred_sdk/resources/life_events.py | 128 ++++++--- .../kindred_sdk/resources/relationships.py | 144 +++++++--- kindred-sdk/kindred_sdk/resources/tags.py | 109 ++++--- 15 files changed, 1386 insertions(+), 571 deletions(-) create mode 100644 kindred-sdk/kindred_sdk/resources/activity_logs.py create mode 100644 kindred-sdk/kindred_sdk/resources/calendar.py create mode 100644 kindred-sdk/kindred_sdk/resources/contacts.py diff --git a/kind b/kind index 7939e044..380269e0 100644 --- a/kind +++ b/kind @@ -1,120 +1,131 @@ -# Kindred SDK - -A typed Python client for [Personal CRM](https://github.com/willff/personal-crm) (Kindred), generated from its OpenAPI schema. - -## Installation - -```bash -pip install kindred-sdk -``` - -Or with Poetry: - -```bash -poetry add kindred-sdk -``` - -## Quick Start - -```python -from kindred_sdk import KindredClient - -# Create a client (unauthenticated) -client = KindredClient(base_url="https://kindred.example.com") - -# Or with authentication -client = KindredClient( - base_url="https://kindred.example.com", - token="your-api-token" +"""Reminders resource for Kindred SDK.""" + +from personal_crm_client import AuthenticatedClient, Client +from personal_crm_client.models import ( + ReminderCreate, + ReminderUpdate, + ReminderPublic, + RemindersPublic, + HTTPValidationError, ) - -# List contacts -contacts = client.contacts.list() -for contact in contacts.data: - print(contact.name) - -# Get a specific contact -contact = client.contacts.get(contact_id="uuid-here") - -# Create a contact -from personal_crm_client.models import ContactCreate -new_contact = client.contacts.create( - ContactCreate(name="John Doe", email="john@example.com") -) - -# Async support -import asyncio - -async def main(): - contacts = await client.contacts.list_async() - print(contacts) - -asyncio.run(main()) -``` - -## Available Resources - -The SDK provides a thin facade over the generated OpenAPI client with these resources: - -| Resource | Methods | -|----------|---------| -| `client.contacts` | `list()`, `get()`, `create()`, `update()`, `delete()`, `restore()`, `list_mentions()`, `get_household()` | -| `client.groups` | `list()`, `get()`, `create()`, `update()`, `delete()` | -| `client.interactions` | `list()`, `get()`, `create()`, `update()`, `delete()` | -| `client.tags` | `list()`, `get()`, `create()`, `update()`, `delete()` | -| `client.notes` | `list()`, `get()`, `create()`, `update()`, `delete()` | -| `client.gifts` | `list()`, `get()`, `create()`, `update()`, `delete()` | -| `client.debts` | `list()`, `get()`, `create()`, `update()`, `delete()` | -| `client.pets` | `list()`, `get()`, `create()`, `update()`, `delete()` | -| `client.addresses` | `list()`, `get()`, `create()`, `update()`, `delete()` | -| `client.relationships` | `list()`, `get()`, `create()`, `update()`, `delete()` | -| `client.reminders` | `list()`, `get()`, `create()`, `update()`, `delete()` | -| `client.life_events` | `list()`, `get()`, `create()`, `update()`, `delete()` | -| `client.journal` | `list()`, `get()`, `create()`, `update()`, `delete()` | -| `client.custom_fields` | `list_definitions()`, `create_definition()`, `update_definition()`, `delete_definition()`, `list_values()`, `create_value()`, `update_value()`, `delete_value()` | -| `client.activity_logs` | `list()` | -| `client.calendar` | `get_month()` | - -## Regenerating the SDK - -The SDK is generated from the backend's OpenAPI schema using [`openapi-python-client`](https://github.com/openapi-generators/openapi-python-client): - -```bash -# Fetch the OpenAPI schema -curl http://localhost:8000/api/v1/openapi.json > openapi.json - -# Generate the client -openapi-python-client generate --path openapi.json --output-path kindred-sdk --overwrite - -# The kindred_sdk/ package wraps the generated personal_crm_client/ -``` - -## Schema Drift Detection - -The CI workflow (`.github/workflows/sdk-drift.yml`) automatically: -1. Fetches the OpenAPI schema from the running backend -2. Regenerates the SDK -3. Fails if there are changes (indicating the SDK is out of date) - -To manually check for drift: - -```bash -just sdk-check # If added to justfile -``` - -## Development - -```bash -# Install dependencies -pip install -e kindred-sdk/ - -# Run type checks -cd kindred-sdk && pyright - -# Build the package -cd kindred-sdk && pip build -``` - -## License - -MIT (same as Personal CRM) +from uuid import UUID + +from typing import Optional + + +class RemindersResource: + """Resource for managing reminders.""" + + def __init__(self, client: AuthenticatedClient | Client) -> None: + self._client = client + + def list( + self, + *, + skip: int = 0, + limit: int = 100, + contact_id: Optional[UUID] = None, + ) -> RemindersPublic | HTTPValidationError | None: + """List reminders.""" + from personal_crm_client.api.reminders.reminders_list_reminders import sync + + return sync( + client=self._client, + skip=skip, + limit=limit, + contact_id=contact_id, + ) + + async def list_async( + self, + *, + skip: int = 0, + limit: int = 100, + contact_id: Optional[UUID] = None, + ) -> RemindersPublic | HTTPValidationError | None: + """Async version of list().""" + from personal_crm_client.api.reminders.reminders_list_reminders import asyncio + + return await asyncio( + client=self._client, + skip=skip, + limit=limit, + contact_id=contact_id, + ) + + def get(self, reminder_id: UUID) -> ReminderPublic | HTTPValidationError | None: + """Get a single reminder by ID.""" + from personal_crm_client.api.reminders.reminders_list_reminders import sync + + reminders = self.list() + if reminders and hasattr(reminders, 'data'): + for reminder in reminders.data: + if reminder.id == reminder_id: + return reminder + return None + + def create(self, item: ReminderCreate) -> ReminderPublic | HTTPValidationError | None: + """Create a new reminder.""" + from personal_crm_client.api.reminders.reminders_create_reminder_route import sync + + return sync(client=self._client, body=item) + + async def create_async(self, item: ReminderCreate) -> ReminderPublic | HTTPValidationError | None: + """Async version of create().""" + from personal_crm_client.api.reminders.reminders_create_reminder_route import asyncio + + return await asyncio(client=self._client, body=item) + + def update( + self, reminder_id: UUID, item: ReminderUpdate + ) -> ReminderPublic | HTTPValidationError | None: + """Update an existing reminder.""" + from personal_crm_client.api.reminders.reminders_update_reminder import sync + + return sync(client=self._client, reminder_id=reminder_id, body=item) + + async def update_async( + self, reminder_id: UUID, item: ReminderUpdate + ) -> ReminderPublic | HTTPValidationError | None: + """Async version of update().""" + from personal_crm_client.api.reminders.reminders_update_reminder import asyncio + + return await asyncio(client=self._client, reminder_id=reminder_id, body=item) + + def delete(self, reminder_id: UUID) -> ReminderPublic | HTTPValidationError | None: + """Delete a reminder.""" + from personal_crm_client.api.reminders.reminders_delete_reminder import sync + + return sync(client=self._client, reminder_id=reminder_id) + + async def delete_async( + self, reminder_id: UUID + ) -> ReminderPublic | HTTPValidationError | None: + """Async version of delete().""" + from personal_crm_client.api.reminders.reminders_delete_reminder import asyncio + + return await asyncio(client=self._client, reminder_id=reminder_id) + + def snooze( + self, reminder_id: UUID, *, snooze_until: str + ) -> ReminderPublic | HTTPValidationError | None: + """Snooze a reminder until a specified time.""" + from personal_crm_client.api.reminders.reminders_snooze_reminder import sync + + return sync( + client=self._client, + reminder_id=reminder_id, + snooze_until=snooze_until, + ) + + async def snooze_async( + self, reminder_id: UUID, *, snooze_until: str + ) -> ReminderPublic | HTTPValidationError | None: + """Async version of snooze().""" + from personal_crm_client.api.reminders.reminders_snooze_reminder import asyncio + + return await asyncio( + client=self._client, + reminder_id=reminder_id, + snooze_until=snooze_until, + ) diff --git a/kindred b/kindred index 7108486a..4c64098a 100644 --- a/kindred +++ b/kindred @@ -1,23 +1,27 @@ -"""Calendar resource for Kindred SDK.""" +[tool.poetry] +name = "kindred-sdk" +version = "0.1.0" +description = "A typed Python client for Personal CRM" +authors = ["Will "] +readme = "README.md" +packages = [ + { include = "kindred_sdk" }, + { include = "personal_crm_client" }, +] +include = ["kindred_sdk/py.typed", "personal_crm_client/py.typed"] -from personal_crm_client import AuthenticatedClient, Client -from personal_crm_client.models import CalendarMonthResponse -from personal_crm_client.models import HTTPValidationError -from uuid import UUID +[tool.poetry.dependencies] +python = "^3.10" +httpx = ">=0.23.0,<0.29.0" +attrs = ">=22.2.0" +python-dateutil = "^2.8.0" +[build-system] +requires = ["poetry-core>=2.0.0,<3.0.0"] +build-backend = "poetry.core.masonry.api" -class CalendarResource: - """Resource for calendar operations.""" +[tool.ruff] +line-length = 120 - def __init__(self, client: AuthenticatedClient | Client): - self._client = client - - def get_month(self, *, year: int, month: int) -> CalendarMonthResponse | HTTPValidationError | None: - """Get calendar data for a specific month.""" - from personal_crm_client.api.calendar import calendar_get_calendar_month - return calendar_get_calendar_month.sync(client=self._client, year=year, month=month) - - async def get_month_async(self, *, year: int, month: int) -> CalendarMonthResponse | HTTPValidationError | None: - """Async version of get_month().""" - from personal_crm_client.api.calendar import calendar_get_calendar_month - return await calendar_get_calendar_month.asyncio(client=self._client, year=year, month=month) +[tool.ruff.lint] +select = ["F", "I", "UP"] diff --git a/kindred-sdk/README.md b/kindred-sdk/README.md index 8aa648f4..a3372ebf 100644 --- a/kindred-sdk/README.md +++ b/kindred-sdk/README.md @@ -1,124 +1,107 @@ -# personal-crm-client -A client library for accessing Personal CRM +# Kindred SDK -## Usage -First, create a client: +A typed Python client for [Personal CRM](https://github.com/will/personal-crm), generated from its OpenAPI schema. -```python -from personal_crm_client import Client - -client = Client(base_url="https://api.example.com") -``` +The SDK provides a clean, resource-oriented interface (`kindred_sdk`) built on top of the mechanically generated `personal_crm_client`. Use it for scripting, automations (including n8n custom nodes), and any future third-party integrations. -If the endpoints you're going to hit require authentication, use `AuthenticatedClient` instead: +## Installation -```python -from personal_crm_client import AuthenticatedClient - -client = AuthenticatedClient(base_url="https://api.example.com", token="SuperSecretToken") +```bash +pip install kindred-sdk ``` -Now call your endpoint and use your models: +Or, if you're using Poetry: -```python -from personal_crm_client.models import MyDataModel -from personal_crm_client.api.my_tag import get_my_data_model -from personal_crm_client.types import Response - -with client as client: - my_data: MyDataModel = get_my_data_model.sync(client=client) - # or if you need more info (e.g. status_code) - response: Response[MyDataModel] = get_my_data_model.sync_detailed(client=client) +```bash +poetry add kindred-sdk ``` -Or do the same thing with an async version: +## Quick Start ```python -from personal_crm_client.models import MyDataModel -from personal_crm_client.api.my_tag import get_my_data_model -from personal_crm_client.types import Response - -async with client as client: - my_data: MyDataModel = await get_my_data_model.asyncio(client=client) - response: Response[MyDataModel] = await get_my_data_model.asyncio_detailed(client=client) -``` - -By default, when you're calling an HTTPS API it will attempt to verify that SSL is working correctly. Using certificate verification is highly recommended most of the time, but sometimes you may need to authenticate to a server (especially an internal server) using a custom certificate bundle. - -```python -client = AuthenticatedClient( - base_url="https://internal_api.example.com", - token="SuperSecretToken", - verify_ssl="/path/to/certificate_bundle.pem", -) -``` +from kindred_sdk import KindredClient -You can also disable certificate validation altogether, but beware that **this is a security risk**. - -```python -client = AuthenticatedClient( - base_url="https://internal_api.example.com", - token="SuperSecretToken", - verify_ssl=False +# Create a client (authenticated) +client = KindredClient( + base_url="http://localhost:8000", + token="your-api-token", ) -``` - -Things to know: -1. Every path/method combo becomes a Python module with four functions: - 1. `sync`: Blocking request that returns parsed data (if successful) or `None` - 1. `sync_detailed`: Blocking request that always returns a `Request`, optionally with `parsed` set if the request was successful. - 1. `asyncio`: Like `sync` but async instead of blocking - 1. `asyncio_detailed`: Like `sync_detailed` but async instead of blocking -1. All path/query params, and bodies become method arguments. -1. If your endpoint had any tags on it, the first tag will be used as a module name for the function (my_tag above) -1. Any endpoint which did not have a tag will be in `personal_crm_client.api.default` +# List contacts +contacts = client.contacts.list() +if contacts and hasattr(contacts, 'data'): + for contact in contacts.data: + print(f"{contact.first_name} {contact.last_name}") -## Advanced customizations +# Get a specific contact +from uuid import UUID +contact = client.contacts.get(contact_id=UUID("your-contact-uuid")) -There are more settings on the generated `Client` class which let you control more runtime behavior, check out the docstring on that class for more info. You can also customize the underlying `httpx.Client` or `httpx.AsyncClient` (depending on your use-case): - -```python -from personal_crm_client import Client +# Create a new contact +from personal_crm_client.models import ContactCreate +new_contact = client.contacts.create( + ContactCreate(first_name="John", last_name="Doe") +) -def log_request(request): - print(f"Request event hook: {request.method} {request.url} - Waiting for response") +# Use async +import asyncio -def log_response(response): - request = response.request - print(f"Response event hook: {request.method} {request.url} - Status {response.status_code}") +async def main(): + async with KindredClient( + base_url="http://localhost:8000", + token="your-api-token", + ) as client: + contacts = await client.contacts.list_async() + print(contacts) -client = Client( - base_url="https://api.example.com", - httpx_args={"event_hooks": {"request": [log_request], "response": [log_response]}}, -) +asyncio.run(main()) +``` -# Or get the underlying httpx client to modify directly with client.get_httpx_client() or client.get_async_httpx_client() +## Resources + +The SDK provides the following resource-oriented interfaces: + +- `client.contacts` - Manage contacts (list, get, create, update, delete, restore, mentions, losing touch, household) +- `client.groups` - Manage contact groups +- `client.interactions` - Log and manage interactions +- `client.tags` - Manage tags +- `client.notes` - Manage notes with contact mentions +- `client.gifts` - Track gifts +- `client.debts` - Track debts between contacts +- `client.pets` - Manage contact pets +- `client.addresses` - Manage contact addresses +- `client.relationships` - Manage relationships between contacts +- `client.reminders` - Manage reminders (with snooze support) +- `client.life_events` - Track life events for contacts +- `client.journal` - Personal journal entries +- `client.custom_fields` - Custom field definitions and values +- `client.activity_logs` - Read-only access to activity logs +- `client.calendar` - Calendar views by month + +## Regeneration + +The `personal_crm_client` package is generated from the backend's OpenAPI schema using [openapi-python-client](https://github.com/openapi-generators/openapi-python-client). To regenerate: + +```bash +# From the project root +docker compose exec backend uv run python -c "import json; from app.main import app; print(json.dumps(app.openapi()))" > openapi.json +cd kindred-sdk +openapi-python-client generate --url ../openapi.json --output . --overwrite ``` -You can even set the httpx client directly, but beware that this will override any existing settings (e.g., base_url): +## Development -```python -import httpx -from personal_crm_client import Client +```bash +cd kindred-sdk +poetry install +poetry shell +``` -client = Client( - base_url="https://api.example.com", -) -# Note that base_url needs to be re-set, as would any shared cookies, headers, etc. -client.set_httpx_client(httpx.Client(base_url="https://api.example.com", proxies="http://localhost:8030")) +Run linting: +```bash +ruff check . ``` -## Building / publishing this package -This project uses [Poetry](https://python-poetry.org/) to manage dependencies and packaging. Here are the basics: -1. Update the metadata in pyproject.toml (e.g. authors, version) -1. If you're using a private repository, configure it with Poetry - 1. `poetry config repositories. ` - 1. `poetry config http-basic. ` -1. Publish the client with `poetry publish --build -r ` or, if for public PyPI, just `poetry publish --build` - -If you want to install this client into another project without publishing it (e.g. for development) then: -1. If that project **is using Poetry**, you can simply do `poetry add ` from that project -1. If that project is not using Poetry: - 1. Build a wheel with `poetry build -f wheel` - 1. Install that wheel from the other project `pip install ` +## License + +MIT (or your chosen license) diff --git a/kindred-sdk/kindred_sdk/client.py b/kindred-sdk/kindred_sdk/client.py index e69de29b..71819806 100644 --- a/kindred-sdk/kindred_sdk/client.py +++ b/kindred-sdk/kindred_sdk/client.py @@ -0,0 +1,101 @@ +"""Kindred SDK client for Personal CRM.""" + +from personal_crm_client import AuthenticatedClient, Client +from personal_crm_client.models import HTTPValidationError + +from .resources.contacts import ContactsResource +from .resources.groups import GroupsResource +from .resources.interactions import InteractionsResource +from .resources.tags import TagsResource +from .resources.notes import NotesResource +from .resources.gifts import GiftsResource +from .resources.debts import DebtsResource +from .resources.pets import PetsResource +from .resources.addresses import AddressesResource +from .resources.relationships import RelationshipsResource +from .resources.reminders import RemindersResource +from .resources.life_events import LifeEventsResource +from .resources.journal import JournalResource +from .resources.custom_fields import CustomFieldsResource +from .resources.activity_logs import ActivityLogsResource +from .resources.calendar import CalendarResource + + +class KindredClient: + """A high-level client for the Personal CRM API. + + This client provides a clean, resource-oriented interface over the + generated ``personal_crm_client``. Use it for scripting, automations, + and any custom integrations. + + Example: + >>> from kindred_sdk import KindredClient + >>> client = KindredClient(base_url="http://localhost:8000", token="my-token") + >>> contacts = client.contacts.list() + """ + + def __init__( + self, + base_url: str, + token: str | None = None, + *, + verify_ssl: bool = True, + timeout: float | None = None, + ) -> None: + """Initialize the Kindred client. + + Args: + base_url: The base URL of the Personal CRM API. + token: Optional Bearer token for authenticated requests. + verify_ssl: Whether to verify SSL certificates. + timeout: Request timeout in seconds. + """ + if token: + self._client: AuthenticatedClient | Client = AuthenticatedClient( + base_url=base_url, + token=token, + verify_ssl=verify_ssl, + ) + else: + self._client = Client( + base_url=base_url, + verify_ssl=verify_ssl, + ) + if timeout is not None: + self._client = self._client.with_timeout(timeout) + + # Initialize resources + self.contacts = ContactsResource(self._client) + self.groups = GroupsResource(self._client) + self.interactions = InteractionsResource(self._client) + self.tags = TagsResource(self._client) + self.notes = NotesResource(self._client) + self.gifts = GiftsResource(self._client) + self.debts = DebtsResource(self._client) + self.pets = PetsResource(self._client) + self.addresses = AddressesResource(self._client) + self.relationships = RelationshipsResource(self._client) + self.reminders = RemindersResource(self._client) + self.life_events = LifeEventsResource(self._client) + self.journal = JournalResource(self._client) + self.custom_fields = CustomFieldsResource(self._client) + self.activity_logs = ActivityLogsResource(self._client) + self.calendar = CalendarResource(self._client) + + def __enter__(self) -> "KindredClient": + """Enter context manager.""" + self._client.__enter__() + return self + + def __exit__(self, *args: object, **kwargs: object) -> None: + """Exit context manager.""" + self._client.__exit__(*args, **kwargs) + + async def __aenter__(self) -> "KindredClient": + """Enter async context manager.""" + await self._client.__aenter__() + return self + + async def __aexit__(self, *args: object, **kwargs: object) -> None: + """Exit async context manager.""" + await self._client.__aexit__(*args, **kwargs) diff --git a/kindred-sdk/kindred_sdk/resources/activity_logs.py b/kindred-sdk/kindred_sdk/resources/activity_logs.py new file mode 100644 index 00000000..d58befd3 --- /dev/null +++ b/kindred-sdk/kindred_sdk/resources/activity_logs.py @@ -0,0 +1,51 @@ +"""Activity logs resource for Kindred SDK.""" + +from personal_crm_client import AuthenticatedClient, Client +from personal_crm_client.models import ( + ActivityLogPublic, + ActivityLogsPublic, + HTTPValidationError, +) + +from typing import Optional + + +class ActivityLogsResource: + """Resource for reading activity logs (read-only).""" + + def __init__(self, client: AuthenticatedClient | Client) -> None: + self._client = client + + def list( + self, + *, + skip: int = 0, + limit: int = 100, + contact_id: Optional[str] = None, + ) -> ActivityLogsPublic | HTTPValidationError | None: + """List activity logs.""" + from personal_crm_client.api.activity_logs.activity_logs_list_activity_logs import sync + + return sync( + client=self._client, + skip=skip, + limit=limit, + contact_id=contact_id, + ) + + async def list_async( + self, + *, + skip: int = 0, + limit: int = 100, + contact_id: Optional[str] = None, + ) -> ActivityLogsPublic | HTTPValidationError | None: + """Async version of list().""" + from personal_crm_client.api.activity_logs.activity_logs_list_activity_logs import asyncio + + return await asyncio( + client=self._client, + skip=skip, + limit=limit, + contact_id=contact_id, + ) diff --git a/kindred-sdk/kindred_sdk/resources/addresses.py b/kindred-sdk/kindred_sdk/resources/addresses.py index 687dafad..a130f195 100644 --- a/kindred-sdk/kindred_sdk/resources/addresses.py +++ b/kindred-sdk/kindred_sdk/resources/addresses.py @@ -1,63 +1,107 @@ -"""{resource_name} resource for Kindred SDK.""" +"""Addresses resource for Kindred SDK.""" from personal_crm_client import AuthenticatedClient, Client -from personal_crm_client.models import {model}Create, {model}Update, {models}, {model}Public -from personal_crm_client.models import HTTPValidationError +from personal_crm_client.models import ( + AddressCreate, + AddressUpdate, + AddressPublic, + AddressesPublic, + HTTPValidationError, +) from uuid import UUID +from typing import Optional -class {class_name}: - """Resource for managing {module}.""" - def __init__(self, client: AuthenticatedClient | Client): +class AddressesResource: + """Resource for managing addresses.""" + + def __init__(self, client: AuthenticatedClient | Client) -> None: self._client = client - def list(self, *, skip: int = 0, limit: int = 100) -> {models} | HTTPValidationError | None: - """List {module}.""" - from personal_crm_client.api.{module} import {list_func} - return {list_func}.sync(client=self._client, skip=skip, limit=limit) + def list( + self, + *, + skip: int = 0, + limit: int = 100, + contact_id: Optional[UUID] = None, + ) -> AddressesPublic | HTTPValidationError | None: + """List addresses.""" + from personal_crm_client.api.addresses.addresses_list_addresses import sync + + return sync( + client=self._client, + skip=skip, + limit=limit, + contact_id=contact_id, + ) - async def list_async(self, *, skip: int = 0, limit: int = 100) -> {models} | HTTPValidationError | None: + async def list_async( + self, + *, + skip: int = 0, + limit: int = 100, + contact_id: Optional[UUID] = None, + ) -> AddressesPublic | HTTPValidationError | None: """Async version of list().""" - from personal_crm_client.api.{module} import {list_func} - return await {list_func}.asyncio(client=self._client, skip=skip, limit=limit) + from personal_crm_client.api.addresses.addresses_list_addresses import asyncio + + return await asyncio( + client=self._client, + skip=skip, + limit=limit, + contact_id=contact_id, + ) - def get(self, {item_id}: UUID) -> {model}Public | HTTPValidationError | None: - """Get a single {singular} by ID.""" - from personal_crm_client.api.{module} import {get_func} - return {get_func}.sync(client=self._client, {item_id}={item_id}) + def get(self, address_id: UUID) -> AddressPublic | HTTPValidationError | None: + """Get a single address by ID.""" + from personal_crm_client.api.addresses.addresses_list_addresses import sync - async def get_async(self, {item_id}: UUID) -> {model}Public | HTTPValidationError | None: - """Async version of get().""" - from personal_crm_client.api.{module} import {get_func} - return await {get_func}.asyncio(client=self._client, {item_id}={item_id}) + addresses = self.list() + if addresses and hasattr(addresses, 'data'): + for address in addresses.data: + if address.id == address_id: + return address + return None - def create(self, item: {model}Create) -> {model}Public | HTTPValidationError | None: - """Create a new {singular}.""" - from personal_crm_client.api.{module} import {create_func} - return {create_func}.sync(client=self._client, json_body=item) + def create(self, item: AddressCreate) -> AddressPublic | HTTPValidationError | None: + """Create a new address.""" + from personal_crm_client.api.addresses.addresses_create_address_route import sync - async def create_async(self, item: {model}Create) -> {model}Public | HTTPValidationError | None: + return sync(client=self._client, body=item) + + async def create_async(self, item: AddressCreate) -> AddressPublic | HTTPValidationError | None: """Async version of create().""" - from personal_crm_client.api.{module} import {create_func} - return await {create_func}.asyncio(client=self._client, json_body=item) + from personal_crm_client.api.addresses.addresses_create_address_route import asyncio + + return await asyncio(client=self._client, body=item) - def update(self, {item_id}: UUID, item: {model}Update) -> {model}Public | HTTPValidationError | None: - """Update an existing {singular}.""" - from personal_crm_client.api.{module} import {update_func} - return {update_func}.sync(client=self._client, {item_id}={item_id}, json_body=item) + def update( + self, address_id: UUID, item: AddressUpdate + ) -> AddressPublic | HTTPValidationError | None: + """Update an existing address.""" + from personal_crm_client.api.addresses.addresses_update_address import sync - async def update_async(self, {item_id}: UUID, item: {model}Update) -> {model}Public | HTTPValidationError | None: + return sync(client=self._client, address_id=address_id, body=item) + + async def update_async( + self, address_id: UUID, item: AddressUpdate + ) -> AddressPublic | HTTPValidationError | None: """Async version of update().""" - from personal_crm_client.api.{module} import {update_func} - return await {update_func}.asyncio(client=self._client, {item_id}={item_id}, json_body=item) + from personal_crm_client.api.addresses.addresses_update_address import asyncio + + return await asyncio(client=self._client, address_id=address_id, body=item) - def delete(self, {item_id}: UUID) -> {model}Public | HTTPValidationError | None: - """Delete a {singular}.""" - from personal_crm_client.api.{module} import {delete_func} - return {delete_func}.sync(client=self._client, {item_id}={item_id}) + def delete(self, address_id: UUID) -> AddressPublic | HTTPValidationError | None: + """Delete an address.""" + from personal_crm_client.api.addresses.addresses_delete_address import sync - async def delete_async(self, {item_id}: UUID) -> {model}Public | HTTPValidationError | None: + return sync(client=self._client, address_id=address_id) + + async def delete_async( + self, address_id: UUID + ) -> AddressPublic | HTTPValidationError | None: """Async version of delete().""" - from personal_crm_client.api.{module} import {delete_func} - return await {delete_func}.asyncio(client=self._client, {item_id}={item_id}) + from personal_crm_client.api.addresses.addresses_delete_address import asyncio + + return await asyncio(client=self._client, address_id=address_id) diff --git a/kindred-sdk/kindred_sdk/resources/calendar.py b/kindred-sdk/kindred_sdk/resources/calendar.py new file mode 100644 index 00000000..1fa82058 --- /dev/null +++ b/kindred-sdk/kindred_sdk/resources/calendar.py @@ -0,0 +1,38 @@ +"""Calendar resource for Kindred SDK.""" + +from personal_crm_client import AuthenticatedClient, Client +from personal_crm_client.models import ( + CalendarMonthResponse, + HTTPValidationError, +) + + +class CalendarResource: + """Resource for calendar operations.""" + + def __init__(self, client: AuthenticatedClient | Client) -> None: + self._client = client + + def get_month( + self, *, year: int, month: int + ) -> CalendarMonthResponse | HTTPValidationError | None: + """Get calendar data for a specific month.""" + from personal_crm_client.api.calendar.calendar_get_calendar_month import sync + + return sync( + client=self._client, + year=year, + month=month, + ) + + async def get_month_async( + self, *, year: int, month: int + ) -> CalendarMonthResponse | HTTPValidationError | None: + """Async version of get_month().""" + from personal_crm_client.api.calendar.calendar_get_calendar_month import asyncio + + return await asyncio( + client=self._client, + year=year, + month=month, + ) diff --git a/kindred-sdk/kindred_sdk/resources/contacts.py b/kindred-sdk/kindred_sdk/resources/contacts.py new file mode 100644 index 00000000..350abd0a --- /dev/null +++ b/kindred-sdk/kindred_sdk/resources/contacts.py @@ -0,0 +1,271 @@ +"""Contacts resource for Kindred SDK.""" + +from personal_crm_client import AuthenticatedClient, Client +from personal_crm_client.models import ( + ContactCreate, + ContactUpdate, + ContactPublic, + ContactsPublic, + HTTPValidationError, +) +from personal_crm_client.models import HTTPValidationError +from uuid import UUID + +from typing import Optional + + +class ContactsResource: + """Resource for managing contacts.""" + + def __init__(self, client: AuthenticatedClient | Client) -> None: + self._client = client + + def list( + self, + *, + skip: int = 0, + limit: int = 100, + search: Optional[str] = None, + tag_id: Optional[UUID] = None, + group_id: Optional[UUID] = None, + is_favorite: Optional[bool] = None, + is_archived: Optional[bool] = None, + stage: Optional[str] = None, + include_deleted: bool = False, + only_deleted: bool = False, + ids: Optional[list[UUID]] = None, + ) -> ContactsPublic | HTTPValidationError | None: + """List contacts with filtering. + + Pass ``ids`` to fetch a specific batch of contacts (useful for + hydrating references from other resources). When ``ids`` is provided, + the default ``is_archived=False`` filter is lifted so callers can + resolve archived rows too. + + Soft-deleted contacts (``deleted_at`` set) are hidden by default. + Pass ``include_deleted=True`` to surface them alongside live rows, or + ``only_deleted=True`` to fetch the trash view exclusively. + """ + from personal_crm_client.api.contacts.contacts_list_contacts import sync + + return sync( + client=self._client, + skip=skip, + limit=limit, + search=search, + tag_id=tag_id, + group_id=group_id, + is_favorite=is_favorite, + is_archived=is_archived, + stage=stage, + include_deleted=include_deleted, + only_deleted=only_deleted, + ids=ids, + ) + + async def list_async( + self, + *, + skip: int = 0, + limit: int = 100, + search: Optional[str] = None, + tag_id: Optional[UUID] = None, + group_id: Optional[UUID] = None, + is_favorite: Optional[bool] = None, + is_archived: Optional[bool] = None, + stage: Optional[str] = None, + include_deleted: bool = False, + only_deleted: bool = False, + ids: Optional[list[UUID]] = None, + ) -> ContactsPublic | HTTPValidationError | None: + """Async version of list().""" + from personal_crm_client.api.contacts.contacts_list_contacts import asyncio + + return await asyncio( + client=self._client, + skip=skip, + limit=limit, + search=search, + tag_id=tag_id, + group_id=group_id, + is_favorite=is_favorite, + is_archived=is_archived, + stage=stage, + include_deleted=include_deleted, + only_deleted=only_deleted, + ids=ids, + ) + + def get(self, contact_id: UUID) -> ContactPublic | HTTPValidationError | None: + """Get a single contact by ID.""" + from personal_crm_client.api.contacts.contacts_get_contact import sync + + return sync( + client=self._client, + contact_id=contact_id, + ) + + async def get_async(self, contact_id: UUID) -> ContactPublic | HTTPValidationError | None: + """Async version of get().""" + from personal_crm_client.api.contacts.contacts_get_contact import asyncio + + return await asyncio( + client=self._client, + contact_id=contact_id, + ) + + def create(self, item: ContactCreate) -> ContactPublic | HTTPValidationError | None: + """Create a new contact.""" + from personal_crm_client.api.contacts.contacts_create_contact import sync + + return sync( + client=self._client, + body=item, + ) + + async def create_async(self, item: ContactCreate) -> ContactPublic | HTTPValidationError | None: + """Async version of create().""" + from personal_crm_client.api.contacts.contacts_create_contact import asyncio + + return await asyncio( + client=self._client, + body=item, + ) + + def update( + self, contact_id: UUID, item: ContactUpdate + ) -> ContactPublic | HTTPValidationError | None: + """Update an existing contact.""" + from personal_crm_client.api.contacts.contacts_update_contact import sync + + return sync( + client=self._client, + contact_id=contact_id, + body=item, + ) + + async def update_async( + self, contact_id: UUID, item: ContactUpdate + ) -> ContactPublic | HTTPValidationError | None: + """Async version of update().""" + from personal_crm_client.api.contacts.contacts_update_contact import asyncio + + return await asyncio( + client=self._client, + contact_id=contact_id, + body=item, + ) + + def delete(self, contact_id: UUID) -> ContactPublic | HTTPValidationError | None: + """Delete a contact (soft delete).""" + from personal_crm_client.api.contacts.contacts_delete_contact import sync + + return sync( + client=self._client, + contact_id=contact_id, + ) + + async def delete_async(self, contact_id: UUID) -> ContactPublic | HTTPValidationError | None: + """Async version of delete().""" + from personal_crm_client.api.contacts.contacts_delete_contact import asyncio + + return await asyncio( + client=self._client, + contact_id=contact_id, + ) + + def restore(self, contact_id: UUID) -> ContactPublic | HTTPValidationError | None: + """Restore a soft-deleted contact.""" + from personal_crm_client.api.contacts.contacts_restore_contact import sync + + return sync( + client=self._client, + contact_id=contact_id, + ) + + async def restore_async(self, contact_id: UUID) -> ContactPublic | HTTPValidationError | None: + """Async version of restore().""" + from personal_crm_client.api.contacts.contacts_restore_contact import asyncio + + return await asyncio( + client=self._client, + contact_id=contact_id, + ) + + def list_mentions( + self, contact_id: UUID + ) -> list | HTTPValidationError | None: + """List mentions of a contact in notes.""" + from personal_crm_client.api.contacts.contacts_list_contact_mentions import sync + + return sync( + client=self._client, + contact_id=contact_id, + ) + + async def list_mentions_async( + self, contact_id: UUID + ) -> list | HTTPValidationError | None: + """Async version of list_mentions().""" + from personal_crm_client.api.contacts.contacts_list_contact_mentions import asyncio + + return await asyncio( + client=self._client, + contact_id=contact_id, + ) + + def list_losing_touch( + self, + *, + skip: int = 0, + limit: int = 100, + search: Optional[str] = None, + ) -> list | HTTPValidationError | None: + """List contacts you're losing touch with.""" + from personal_crm_client.api.contacts.contacts_list_losing_touch import sync + + return sync( + client=self._client, + skip=skip, + limit=limit, + search=search, + ) + + async def list_losing_touch_async( + self, + *, + skip: int = 0, + limit: int = 100, + search: Optional[str] = None, + ) -> list | HTTPValidationError | None: + """Async version of list_losing_touch().""" + from personal_crm_client.api.contacts.contacts_list_losing_touch import asyncio + + return await asyncio( + client=self._client, + skip=skip, + limit=limit, + search=search, + ) + + def get_household( + self, contact_id: UUID + ) -> list | HTTPValidationError | None: + """Get household members for a contact.""" + from personal_crm_client.api.contacts.contacts_get_contact_household import sync + + return sync( + client=self._client, + contact_id=contact_id, + ) + + async def get_household_async( + self, contact_id: UUID + ) -> list | HTTPValidationError | None: + """Async version of get_household().""" + from personal_crm_client.api.contacts.contacts_get_contact_household import asyncio + + return await asyncio( + client=self._client, + contact_id=contact_id, + ) diff --git a/kindred-sdk/kindred_sdk/resources/debts.py b/kindred-sdk/kindred_sdk/resources/debts.py index 687dafad..6c16efa7 100644 --- a/kindred-sdk/kindred_sdk/resources/debts.py +++ b/kindred-sdk/kindred_sdk/resources/debts.py @@ -1,63 +1,107 @@ -"""{resource_name} resource for Kindred SDK.""" +"""Debts resource for Kindred SDK.""" from personal_crm_client import AuthenticatedClient, Client -from personal_crm_client.models import {model}Create, {model}Update, {models}, {model}Public -from personal_crm_client.models import HTTPValidationError +from personal_crm_client.models import ( + DebtCreate, + DebtUpdate, + DebtPublic, + DebtsPublic, + HTTPValidationError, +) from uuid import UUID +from typing import Optional -class {class_name}: - """Resource for managing {module}.""" - def __init__(self, client: AuthenticatedClient | Client): +class DebtsResource: + """Resource for managing debts.""" + + def __init__(self, client: AuthenticatedClient | Client) -> None: self._client = client - def list(self, *, skip: int = 0, limit: int = 100) -> {models} | HTTPValidationError | None: - """List {module}.""" - from personal_crm_client.api.{module} import {list_func} - return {list_func}.sync(client=self._client, skip=skip, limit=limit) + def list( + self, + *, + skip: int = 0, + limit: int = 100, + contact_id: Optional[UUID] = None, + ) -> DebtsPublic | HTTPValidationError | None: + """List debts.""" + from personal_crm_client.api.debts.debts_list_debts import sync + + return sync( + client=self._client, + skip=skip, + limit=limit, + contact_id=contact_id, + ) - async def list_async(self, *, skip: int = 0, limit: int = 100) -> {models} | HTTPValidationError | None: + async def list_async( + self, + *, + skip: int = 0, + limit: int = 100, + contact_id: Optional[UUID] = None, + ) -> DebtsPublic | HTTPValidationError | None: """Async version of list().""" - from personal_crm_client.api.{module} import {list_func} - return await {list_func}.asyncio(client=self._client, skip=skip, limit=limit) + from personal_crm_client.api.debts.debts_list_debts import asyncio + + return await asyncio( + client=self._client, + skip=skip, + limit=limit, + contact_id=contact_id, + ) - def get(self, {item_id}: UUID) -> {model}Public | HTTPValidationError | None: - """Get a single {singular} by ID.""" - from personal_crm_client.api.{module} import {get_func} - return {get_func}.sync(client=self._client, {item_id}={item_id}) + def get(self, debt_id: UUID) -> DebtPublic | HTTPValidationError | None: + """Get a single debt by ID.""" + from personal_crm_client.api.debts.debts_list_debts import sync - async def get_async(self, {item_id}: UUID) -> {model}Public | HTTPValidationError | None: - """Async version of get().""" - from personal_crm_client.api.{module} import {get_func} - return await {get_func}.asyncio(client=self._client, {item_id}={item_id}) + debts = self.list() + if debts and hasattr(debts, 'data'): + for debt in debts.data: + if debt.id == debt_id: + return debt + return None - def create(self, item: {model}Create) -> {model}Public | HTTPValidationError | None: - """Create a new {singular}.""" - from personal_crm_client.api.{module} import {create_func} - return {create_func}.sync(client=self._client, json_body=item) + def create(self, item: DebtCreate) -> DebtPublic | HTTPValidationError | None: + """Create a new debt.""" + from personal_crm_client.api.debts.debts_create_debt_route import sync - async def create_async(self, item: {model}Create) -> {model}Public | HTTPValidationError | None: + return sync(client=self._client, body=item) + + async def create_async(self, item: DebtCreate) -> DebtPublic | HTTPValidationError | None: """Async version of create().""" - from personal_crm_client.api.{module} import {create_func} - return await {create_func}.asyncio(client=self._client, json_body=item) + from personal_crm_client.api.debts.debts_create_debt_route import asyncio + + return await asyncio(client=self._client, body=item) - def update(self, {item_id}: UUID, item: {model}Update) -> {model}Public | HTTPValidationError | None: - """Update an existing {singular}.""" - from personal_crm_client.api.{module} import {update_func} - return {update_func}.sync(client=self._client, {item_id}={item_id}, json_body=item) + def update( + self, debt_id: UUID, item: DebtUpdate + ) -> DebtPublic | HTTPValidationError | None: + """Update an existing debt.""" + from personal_crm_client.api.debts.debts_update_debt import sync - async def update_async(self, {item_id}: UUID, item: {model}Update) -> {model}Public | HTTPValidationError | None: + return sync(client=self._client, debt_id=debt_id, body=item) + + async def update_async( + self, debt_id: UUID, item: DebtUpdate + ) -> DebtPublic | HTTPValidationError | None: """Async version of update().""" - from personal_crm_client.api.{module} import {update_func} - return await {update_func}.asyncio(client=self._client, {item_id}={item_id}, json_body=item) + from personal_crm_client.api.debts.debts_update_debt import asyncio + + return await asyncio(client=self._client, debt_id=debt_id, body=item) - def delete(self, {item_id}: UUID) -> {model}Public | HTTPValidationError | None: - """Delete a {singular}.""" - from personal_crm_client.api.{module} import {delete_func} - return {delete_func}.sync(client=self._client, {item_id}={item_id}) + def delete(self, debt_id: UUID) -> DebtPublic | HTTPValidationError | None: + """Delete a debt.""" + from personal_crm_client.api.debts.debts_delete_debt import sync - async def delete_async(self, {item_id}: UUID) -> {model}Public | HTTPValidationError | None: + return sync(client=self._client, debt_id=debt_id) + + async def delete_async( + self, debt_id: UUID + ) -> DebtPublic | HTTPValidationError | None: """Async version of delete().""" - from personal_crm_client.api.{module} import {delete_func} - return await {delete_func}.asyncio(client=self._client, {item_id}={item_id}) + from personal_crm_client.api.debts.debts_delete_debt import asyncio + + return await asyncio(client=self._client, debt_id=debt_id) diff --git a/kindred-sdk/kindred_sdk/resources/gifts.py b/kindred-sdk/kindred_sdk/resources/gifts.py index 687dafad..278ce578 100644 --- a/kindred-sdk/kindred_sdk/resources/gifts.py +++ b/kindred-sdk/kindred_sdk/resources/gifts.py @@ -1,63 +1,107 @@ -"""{resource_name} resource for Kindred SDK.""" +"""Gifts resource for Kindred SDK.""" from personal_crm_client import AuthenticatedClient, Client -from personal_crm_client.models import {model}Create, {model}Update, {models}, {model}Public -from personal_crm_client.models import HTTPValidationError +from personal_crm_client.models import ( + GiftCreate, + GiftUpdate, + GiftPublic, + GiftsPublic, + HTTPValidationError, +) from uuid import UUID +from typing import Optional -class {class_name}: - """Resource for managing {module}.""" - def __init__(self, client: AuthenticatedClient | Client): +class GiftsResource: + """Resource for managing gifts.""" + + def __init__(self, client: AuthenticatedClient | Client) -> None: self._client = client - def list(self, *, skip: int = 0, limit: int = 100) -> {models} | HTTPValidationError | None: - """List {module}.""" - from personal_crm_client.api.{module} import {list_func} - return {list_func}.sync(client=self._client, skip=skip, limit=limit) + def list( + self, + *, + skip: int = 0, + limit: int = 100, + contact_id: Optional[UUID] = None, + ) -> GiftsPublic | HTTPValidationError | None: + """List gifts.""" + from personal_crm_client.api.gifts.gifts_list_gifts import sync + + return sync( + client=self._client, + skip=skip, + limit=limit, + contact_id=contact_id, + ) - async def list_async(self, *, skip: int = 0, limit: int = 100) -> {models} | HTTPValidationError | None: + async def list_async( + self, + *, + skip: int = 0, + limit: int = 100, + contact_id: Optional[UUID] = None, + ) -> GiftsPublic | HTTPValidationError | None: """Async version of list().""" - from personal_crm_client.api.{module} import {list_func} - return await {list_func}.asyncio(client=self._client, skip=skip, limit=limit) + from personal_crm_client.api.gifts.gifts_list_gifts import asyncio + + return await asyncio( + client=self._client, + skip=skip, + limit=limit, + contact_id=contact_id, + ) - def get(self, {item_id}: UUID) -> {model}Public | HTTPValidationError | None: - """Get a single {singular} by ID.""" - from personal_crm_client.api.{module} import {get_func} - return {get_func}.sync(client=self._client, {item_id}={item_id}) + def get(self, gift_id: UUID) -> GiftPublic | HTTPValidationError | None: + """Get a single gift by ID.""" + from personal_crm_client.api.gifts.gifts_list_gifts import sync - async def get_async(self, {item_id}: UUID) -> {model}Public | HTTPValidationError | None: - """Async version of get().""" - from personal_crm_client.api.{module} import {get_func} - return await {get_func}.asyncio(client=self._client, {item_id}={item_id}) + gifts = self.list() + if gifts and hasattr(gifts, 'data'): + for gift in gifts.data: + if gift.id == gift_id: + return gift + return None - def create(self, item: {model}Create) -> {model}Public | HTTPValidationError | None: - """Create a new {singular}.""" - from personal_crm_client.api.{module} import {create_func} - return {create_func}.sync(client=self._client, json_body=item) + def create(self, item: GiftCreate) -> GiftPublic | HTTPValidationError | None: + """Create a new gift.""" + from personal_crm_client.api.gifts.gifts_create_gift_route import sync - async def create_async(self, item: {model}Create) -> {model}Public | HTTPValidationError | None: + return sync(client=self._client, body=item) + + async def create_async(self, item: GiftCreate) -> GiftPublic | HTTPValidationError | None: """Async version of create().""" - from personal_crm_client.api.{module} import {create_func} - return await {create_func}.asyncio(client=self._client, json_body=item) + from personal_crm_client.api.gifts.gifts_create_gift_route import asyncio + + return await asyncio(client=self._client, body=item) - def update(self, {item_id}: UUID, item: {model}Update) -> {model}Public | HTTPValidationError | None: - """Update an existing {singular}.""" - from personal_crm_client.api.{module} import {update_func} - return {update_func}.sync(client=self._client, {item_id}={item_id}, json_body=item) + def update( + self, gift_id: UUID, item: GiftUpdate + ) -> GiftPublic | HTTPValidationError | None: + """Update an existing gift.""" + from personal_crm_client.api.gifts.gifts_update_gift import sync - async def update_async(self, {item_id}: UUID, item: {model}Update) -> {model}Public | HTTPValidationError | None: + return sync(client=self._client, gift_id=gift_id, body=item) + + async def update_async( + self, gift_id: UUID, item: GiftUpdate + ) -> GiftPublic | HTTPValidationError | None: """Async version of update().""" - from personal_crm_client.api.{module} import {update_func} - return await {update_func}.asyncio(client=self._client, {item_id}={item_id}, json_body=item) + from personal_crm_client.api.gifts.gifts_update_gift import asyncio + + return await asyncio(client=self._client, gift_id=gift_id, body=item) - def delete(self, {item_id}: UUID) -> {model}Public | HTTPValidationError | None: - """Delete a {singular}.""" - from personal_crm_client.api.{module} import {delete_func} - return {delete_func}.sync(client=self._client, {item_id}={item_id}) + def delete(self, gift_id: UUID) -> GiftPublic | HTTPValidationError | None: + """Delete a gift.""" + from personal_crm_client.api.gifts.gifts_delete_gift import sync - async def delete_async(self, {item_id}: UUID) -> {model}Public | HTTPValidationError | None: + return sync(client=self._client, gift_id=gift_id) + + async def delete_async( + self, gift_id: UUID + ) -> GiftPublic | HTTPValidationError | None: """Async version of delete().""" - from personal_crm_client.api.{module} import {delete_func} - return await {delete_func}.asyncio(client=self._client, {item_id}={item_id}) + from personal_crm_client.api.gifts.gifts_delete_gift import asyncio + + return await asyncio(client=self._client, gift_id=gift_id) diff --git a/kindred-sdk/kindred_sdk/resources/interactions.py b/kindred-sdk/kindred_sdk/resources/interactions.py index 687dafad..bf956646 100644 --- a/kindred-sdk/kindred_sdk/resources/interactions.py +++ b/kindred-sdk/kindred_sdk/resources/interactions.py @@ -1,63 +1,118 @@ -"""{resource_name} resource for Kindred SDK.""" +"""Interactions resource for Kindred SDK.""" from personal_crm_client import AuthenticatedClient, Client -from personal_crm_client.models import {model}Create, {model}Update, {models}, {model}Public -from personal_crm_client.models import HTTPValidationError +from personal_crm_client.models import ( + InteractionCreate, + InteractionUpdate, + InteractionPublic, + InteractionsPublic, + HTTPValidationError, +) from uuid import UUID +from typing import Optional -class {class_name}: - """Resource for managing {module}.""" - def __init__(self, client: AuthenticatedClient | Client): +class InteractionsResource: + """Resource for managing interactions.""" + + def __init__(self, client: AuthenticatedClient | Client) -> None: self._client = client - def list(self, *, skip: int = 0, limit: int = 100) -> {models} | HTTPValidationError | None: - """List {module}.""" - from personal_crm_client.api.{module} import {list_func} - return {list_func}.sync(client=self._client, skip=skip, limit=limit) + def list( + self, + *, + skip: int = 0, + limit: int = 100, + contact_id: Optional[UUID] = None, + search: Optional[str] = None, + ) -> InteractionsPublic | HTTPValidationError | None: + """List interactions.""" + from personal_crm_client.api.interactions.interactions_list_interactions import sync + + return sync( + client=self._client, + skip=skip, + limit=limit, + contact_id=contact_id, + search=search, + ) - async def list_async(self, *, skip: int = 0, limit: int = 100) -> {models} | HTTPValidationError | None: + async def list_async( + self, + *, + skip: int = 0, + limit: int = 100, + contact_id: Optional[UUID] = None, + search: Optional[str] = None, + ) -> InteractionsPublic | HTTPValidationError | None: """Async version of list().""" - from personal_crm_client.api.{module} import {list_func} - return await {list_func}.asyncio(client=self._client, skip=skip, limit=limit) + from personal_crm_client.api.interactions.interactions_list_interactions import asyncio + + return await asyncio( + client=self._client, + skip=skip, + limit=limit, + contact_id=contact_id, + search=search, + ) - def get(self, {item_id}: UUID) -> {model}Public | HTTPValidationError | None: - """Get a single {singular} by ID.""" - from personal_crm_client.api.{module} import {get_func} - return {get_func}.sync(client=self._client, {item_id}={item_id}) + def get(self, interaction_id: UUID) -> InteractionPublic | HTTPValidationError | None: + """Get a single interaction by ID.""" + from personal_crm_client.api.interactions.interactions_get_interaction import sync - async def get_async(self, {item_id}: UUID) -> {model}Public | HTTPValidationError | None: + return sync(client=self._client, interaction_id=interaction_id) + + async def get_async( + self, interaction_id: UUID + ) -> InteractionPublic | HTTPValidationError | None: """Async version of get().""" - from personal_crm_client.api.{module} import {get_func} - return await {get_func}.asyncio(client=self._client, {item_id}={item_id}) + from personal_crm_client.api.interactions.interactions_get_interaction import asyncio + + return await asyncio(client=self._client, interaction_id=interaction_id) + + def create( + self, item: InteractionCreate + ) -> InteractionPublic | HTTPValidationError | None: + """Create a new interaction.""" + from personal_crm_client.api.interactions.interactions_create_interaction import sync - def create(self, item: {model}Create) -> {model}Public | HTTPValidationError | None: - """Create a new {singular}.""" - from personal_crm_client.api.{module} import {create_func} - return {create_func}.sync(client=self._client, json_body=item) + return sync(client=self._client, body=item) - async def create_async(self, item: {model}Create) -> {model}Public | HTTPValidationError | None: + async def create_async( + self, item: InteractionCreate + ) -> InteractionPublic | HTTPValidationError | None: """Async version of create().""" - from personal_crm_client.api.{module} import {create_func} - return await {create_func}.asyncio(client=self._client, json_body=item) + from personal_crm_client.api.interactions.interactions_create_interaction import asyncio - def update(self, {item_id}: UUID, item: {model}Update) -> {model}Public | HTTPValidationError | None: - """Update an existing {singular}.""" - from personal_crm_client.api.{module} import {update_func} - return {update_func}.sync(client=self._client, {item_id}={item_id}, json_body=item) + return await asyncio(client=self._client, body=item) - async def update_async(self, {item_id}: UUID, item: {model}Update) -> {model}Public | HTTPValidationError | None: + def update( + self, interaction_id: UUID, item: InteractionUpdate + ) -> InteractionPublic | HTTPValidationError | None: + """Update an existing interaction.""" + from personal_crm_client.api.interactions.interactions_update_interaction import sync + + return sync(client=self._client, interaction_id=interaction_id, body=item) + + async def update_async( + self, interaction_id: UUID, item: InteractionUpdate + ) -> InteractionPublic | HTTPValidationError | None: """Async version of update().""" - from personal_crm_client.api.{module} import {update_func} - return await {update_func}.asyncio(client=self._client, {item_id}={item_id}, json_body=item) + from personal_crm_client.api.interactions.interactions_update_interaction import asyncio + + return await asyncio(client=self._client, interaction_id=interaction_id, body=item) - def delete(self, {item_id}: UUID) -> {model}Public | HTTPValidationError | None: - """Delete a {singular}.""" - from personal_crm_client.api.{module} import {delete_func} - return {delete_func}.sync(client=self._client, {item_id}={item_id}) + def delete(self, interaction_id: UUID) -> InteractionPublic | HTTPValidationError | None: + """Delete an interaction.""" + from personal_crm_client.api.interactions.interactions_delete_interaction import sync - async def delete_async(self, {item_id}: UUID) -> {model}Public | HTTPValidationError | None: + return sync(client=self._client, interaction_id=interaction_id) + + async def delete_async( + self, interaction_id: UUID + ) -> InteractionPublic | HTTPValidationError | None: """Async version of delete().""" - from personal_crm_client.api.{module} import {delete_func} - return await {delete_func}.asyncio(client=self._client, {item_id}={item_id}) + from personal_crm_client.api.interactions.interactions_delete_interaction import asyncio + + return await asyncio(client=self._client, interaction_id=interaction_id) diff --git a/kindred-sdk/kindred_sdk/resources/journal.py b/kindred-sdk/kindred_sdk/resources/journal.py index 687dafad..53d77d29 100644 --- a/kindred-sdk/kindred_sdk/resources/journal.py +++ b/kindred-sdk/kindred_sdk/resources/journal.py @@ -1,63 +1,103 @@ -"""{resource_name} resource for Kindred SDK.""" +"""Journal resource for Kindred SDK.""" from personal_crm_client import AuthenticatedClient, Client -from personal_crm_client.models import {model}Create, {model}Update, {models}, {model}Public -from personal_crm_client.models import HTTPValidationError +from personal_crm_client.models import ( + JournalEntryCreate, + JournalEntryUpdate, + JournalEntryPublic, + JournalEntriesPublic, + HTTPValidationError, +) from uuid import UUID +from typing import Optional -class {class_name}: - """Resource for managing {module}.""" - def __init__(self, client: AuthenticatedClient | Client): +class JournalResource: + """Resource for managing journal entries.""" + + def __init__(self, client: AuthenticatedClient | Client) -> None: self._client = client - def list(self, *, skip: int = 0, limit: int = 100) -> {models} | HTTPValidationError | None: - """List {module}.""" - from personal_crm_client.api.{module} import {list_func} - return {list_func}.sync(client=self._client, skip=skip, limit=limit) + def list( + self, + *, + skip: int = 0, + limit: int = 100, + ) -> JournalEntriesPublic | HTTPValidationError | None: + """List journal entries.""" + from personal_crm_client.api.journal.journal_list_journal_entries import sync + + return sync( + client=self._client, + skip=skip, + limit=limit, + ) - async def list_async(self, *, skip: int = 0, limit: int = 100) -> {models} | HTTPValidationError | None: + async def list_async( + self, + *, + skip: int = 0, + limit: int = 100, + ) -> JournalEntriesPublic | HTTPValidationError | None: """Async version of list().""" - from personal_crm_client.api.{module} import {list_func} - return await {list_func}.asyncio(client=self._client, skip=skip, limit=limit) + from personal_crm_client.api.journal.journal_list_journal_entries import asyncio + + return await asyncio( + client=self._client, + skip=skip, + limit=limit, + ) - def get(self, {item_id}: UUID) -> {model}Public | HTTPValidationError | None: - """Get a single {singular} by ID.""" - from personal_crm_client.api.{module} import {get_func} - return {get_func}.sync(client=self._client, {item_id}={item_id}) + def get(self, entry_id: UUID) -> JournalEntryPublic | HTTPValidationError | None: + """Get a single journal entry by ID.""" + from personal_crm_client.api.journal.journal_list_journal_entries import sync - async def get_async(self, {item_id}: UUID) -> {model}Public | HTTPValidationError | None: - """Async version of get().""" - from personal_crm_client.api.{module} import {get_func} - return await {get_func}.asyncio(client=self._client, {item_id}={item_id}) + entries = self.list() + if entries and hasattr(entries, 'data'): + for entry in entries.data: + if entry.id == entry_id: + return entry + return None - def create(self, item: {model}Create) -> {model}Public | HTTPValidationError | None: - """Create a new {singular}.""" - from personal_crm_client.api.{module} import {create_func} - return {create_func}.sync(client=self._client, json_body=item) + def create(self, item: JournalEntryCreate) -> JournalEntryPublic | HTTPValidationError | None: + """Create a new journal entry.""" + from personal_crm_client.api.journal.journal_create_journal_entry_route import sync - async def create_async(self, item: {model}Create) -> {model}Public | HTTPValidationError | None: + return sync(client=self._client, body=item) + + async def create_async(self, item: JournalEntryCreate) -> JournalEntryPublic | HTTPValidationError | None: """Async version of create().""" - from personal_crm_client.api.{module} import {create_func} - return await {create_func}.asyncio(client=self._client, json_body=item) + from personal_crm_client.api.journal.journal_create_journal_entry_route import asyncio + + return await asyncio(client=self._client, body=item) - def update(self, {item_id}: UUID, item: {model}Update) -> {model}Public | HTTPValidationError | None: - """Update an existing {singular}.""" - from personal_crm_client.api.{module} import {update_func} - return {update_func}.sync(client=self._client, {item_id}={item_id}, json_body=item) + def update( + self, entry_id: UUID, item: JournalEntryUpdate + ) -> JournalEntryPublic | HTTPValidationError | None: + """Update an existing journal entry.""" + from personal_crm_client.api.journal.journal_update_journal_entry import sync - async def update_async(self, {item_id}: UUID, item: {model}Update) -> {model}Public | HTTPValidationError | None: + return sync(client=self._client, entry_id=entry_id, body=item) + + async def update_async( + self, entry_id: UUID, item: JournalEntryUpdate + ) -> JournalEntryPublic | HTTPValidationError | None: """Async version of update().""" - from personal_crm_client.api.{module} import {update_func} - return await {update_func}.asyncio(client=self._client, {item_id}={item_id}, json_body=item) + from personal_crm_client.api.journal.journal_update_journal_entry import asyncio + + return await asyncio(client=self._client, entry_id=entry_id, body=item) - def delete(self, {item_id}: UUID) -> {model}Public | HTTPValidationError | None: - """Delete a {singular}.""" - from personal_crm_client.api.{module} import {delete_func} - return {delete_func}.sync(client=self._client, {item_id}={item_id}) + def delete(self, entry_id: UUID) -> JournalEntryPublic | HTTPValidationError | None: + """Delete a journal entry.""" + from personal_crm_client.api.journal.journal_delete_journal_entry import sync - async def delete_async(self, {item_id}: UUID) -> {model}Public | HTTPValidationError | None: + return sync(client=self._client, entry_id=entry_id) + + async def delete_async( + self, entry_id: UUID + ) -> JournalEntryPublic | HTTPValidationError | None: """Async version of delete().""" - from personal_crm_client.api.{module} import {delete_func} - return await {delete_func}.asyncio(client=self._client, {item_id}={item_id}) + from personal_crm_client.api.journal.journal_delete_journal_entry import asyncio + + return await asyncio(client=self._client, entry_id=entry_id) diff --git a/kindred-sdk/kindred_sdk/resources/life_events.py b/kindred-sdk/kindred_sdk/resources/life_events.py index 687dafad..1f1c3bd8 100644 --- a/kindred-sdk/kindred_sdk/resources/life_events.py +++ b/kindred-sdk/kindred_sdk/resources/life_events.py @@ -1,63 +1,107 @@ -"""{resource_name} resource for Kindred SDK.""" +"""Life events resource for Kindred SDK.""" from personal_crm_client import AuthenticatedClient, Client -from personal_crm_client.models import {model}Create, {model}Update, {models}, {model}Public -from personal_crm_client.models import HTTPValidationError +from personal_crm_client.models import ( + LifeEventCreate, + LifeEventUpdate, + LifeEventPublic, + LifeEventsPublic, + HTTPValidationError, +) from uuid import UUID +from typing import Optional -class {class_name}: - """Resource for managing {module}.""" - def __init__(self, client: AuthenticatedClient | Client): +class LifeEventsResource: + """Resource for managing life events.""" + + def __init__(self, client: AuthenticatedClient | Client) -> None: self._client = client - def list(self, *, skip: int = 0, limit: int = 100) -> {models} | HTTPValidationError | None: - """List {module}.""" - from personal_crm_client.api.{module} import {list_func} - return {list_func}.sync(client=self._client, skip=skip, limit=limit) + def list( + self, + *, + skip: int = 0, + limit: int = 100, + contact_id: Optional[UUID] = None, + ) -> LifeEventsPublic | HTTPValidationError | None: + """List life events.""" + from personal_crm_client.api.life_events.life_events_list_life_events import sync + + return sync( + client=self._client, + skip=skip, + limit=limit, + contact_id=contact_id, + ) - async def list_async(self, *, skip: int = 0, limit: int = 100) -> {models} | HTTPValidationError | None: + async def list_async( + self, + *, + skip: int = 0, + limit: int = 100, + contact_id: Optional[UUID] = None, + ) -> LifeEventsPublic | HTTPValidationError | None: """Async version of list().""" - from personal_crm_client.api.{module} import {list_func} - return await {list_func}.asyncio(client=self._client, skip=skip, limit=limit) + from personal_crm_client.api.life_events.life_events_list_life_events import asyncio + + return await asyncio( + client=self._client, + skip=skip, + limit=limit, + contact_id=contact_id, + ) - def get(self, {item_id}: UUID) -> {model}Public | HTTPValidationError | None: - """Get a single {singular} by ID.""" - from personal_crm_client.api.{module} import {get_func} - return {get_func}.sync(client=self._client, {item_id}={item_id}) + def get(self, life_event_id: UUID) -> LifeEventPublic | HTTPValidationError | None: + """Get a single life event by ID.""" + from personal_crm_client.api.life_events.life_events_list_life_events import sync - async def get_async(self, {item_id}: UUID) -> {model}Public | HTTPValidationError | None: - """Async version of get().""" - from personal_crm_client.api.{module} import {get_func} - return await {get_func}.asyncio(client=self._client, {item_id}={item_id}) + events = self.list() + if events and hasattr(events, 'data'): + for event in events.data: + if event.id == life_event_id: + return event + return None - def create(self, item: {model}Create) -> {model}Public | HTTPValidationError | None: - """Create a new {singular}.""" - from personal_crm_client.api.{module} import {create_func} - return {create_func}.sync(client=self._client, json_body=item) + def create(self, item: LifeEventCreate) -> LifeEventPublic | HTTPValidationError | None: + """Create a new life event.""" + from personal_crm_client.api.life_events.life_events_create_life_event_route import sync - async def create_async(self, item: {model}Create) -> {model}Public | HTTPValidationError | None: + return sync(client=self._client, body=item) + + async def create_async(self, item: LifeEventCreate) -> LifeEventPublic | HTTPValidationError | None: """Async version of create().""" - from personal_crm_client.api.{module} import {create_func} - return await {create_func}.asyncio(client=self._client, json_body=item) + from personal_crm_client.api.life_events.life_events_create_life_event_route import asyncio + + return await asyncio(client=self._client, body=item) - def update(self, {item_id}: UUID, item: {model}Update) -> {model}Public | HTTPValidationError | None: - """Update an existing {singular}.""" - from personal_crm_client.api.{module} import {update_func} - return {update_func}.sync(client=self._client, {item_id}={item_id}, json_body=item) + def update( + self, life_event_id: UUID, item: LifeEventUpdate + ) -> LifeEventPublic | HTTPValidationError | None: + """Update an existing life event.""" + from personal_crm_client.api.life_events.life_events_update_life_event import sync - async def update_async(self, {item_id}: UUID, item: {model}Update) -> {model}Public | HTTPValidationError | None: + return sync(client=self._client, life_event_id=life_event_id, body=item) + + async def update_async( + self, life_event_id: UUID, item: LifeEventUpdate + ) -> LifeEventPublic | HTTPValidationError | None: """Async version of update().""" - from personal_crm_client.api.{module} import {update_func} - return await {update_func}.asyncio(client=self._client, {item_id}={item_id}, json_body=item) + from personal_crm_client.api.life_events.life_events_update_life_event import asyncio + + return await asyncio(client=self._client, life_event_id=life_event_id, body=item) - def delete(self, {item_id}: UUID) -> {model}Public | HTTPValidationError | None: - """Delete a {singular}.""" - from personal_crm_client.api.{module} import {delete_func} - return {delete_func}.sync(client=self._client, {item_id}={item_id}) + def delete(self, life_event_id: UUID) -> LifeEventPublic | HTTPValidationError | None: + """Delete a life event.""" + from personal_crm_client.api.life_events.life_events_delete_life_event import sync - async def delete_async(self, {item_id}: UUID) -> {model}Public | HTTPValidationError | None: + return sync(client=self._client, life_event_id=life_event_id) + + async def delete_async( + self, life_event_id: UUID + ) -> LifeEventPublic | HTTPValidationError | None: """Async version of delete().""" - from personal_crm_client.api.{module} import {delete_func} - return await {delete_func}.asyncio(client=self._client, {item_id}={item_id}) + from personal_crm_client.api.life_events.life_events_delete_life_event import asyncio + + return await asyncio(client=self._client, life_event_id=life_event_id) diff --git a/kindred-sdk/kindred_sdk/resources/relationships.py b/kindred-sdk/kindred_sdk/resources/relationships.py index 687dafad..8e2e158d 100644 --- a/kindred-sdk/kindred_sdk/resources/relationships.py +++ b/kindred-sdk/kindred_sdk/resources/relationships.py @@ -1,63 +1,123 @@ -"""{resource_name} resource for Kindred SDK.""" +"""Relationships resource for Kindred SDK.""" from personal_crm_client import AuthenticatedClient, Client -from personal_crm_client.models import {model}Create, {model}Update, {models}, {model}Public -from personal_crm_client.models import HTTPValidationError +from personal_crm_client.models import ( + RelationshipCreate, + RelationshipUpdate, + RelationshipPublic, + RelationshipsPublic, + HTTPValidationError, +) from uuid import UUID +from typing import Optional -class {class_name}: - """Resource for managing {module}.""" - def __init__(self, client: AuthenticatedClient | Client): +class RelationshipsResource: + """Resource for managing relationships.""" + + def __init__(self, client: AuthenticatedClient | Client) -> None: self._client = client - def list(self, *, skip: int = 0, limit: int = 100) -> {models} | HTTPValidationError | None: - """List {module}.""" - from personal_crm_client.api.{module} import {list_func} - return {list_func}.sync(client=self._client, skip=skip, limit=limit) + def list( + self, + *, + skip: int = 0, + limit: int = 100, + contact_id: Optional[UUID] = None, + ) -> RelationshipsPublic | HTTPValidationError | None: + """List relationships.""" + from personal_crm_client.api.relationships.relationships_list_relationships import sync + + return sync( + client=self._client, + skip=skip, + limit=limit, + contact_id=contact_id, + ) - async def list_async(self, *, skip: int = 0, limit: int = 100) -> {models} | HTTPValidationError | None: + async def list_async( + self, + *, + skip: int = 0, + limit: int = 100, + contact_id: Optional[UUID] = None, + ) -> RelationshipsPublic | HTTPValidationError | None: """Async version of list().""" - from personal_crm_client.api.{module} import {list_func} - return await {list_func}.asyncio(client=self._client, skip=skip, limit=limit) + from personal_crm_client.api.relationships.relationships_list_relationships import asyncio + + return await asyncio( + client=self._client, + skip=skip, + limit=limit, + contact_id=contact_id, + ) + + def get(self, relationship_id: UUID) -> RelationshipPublic | HTTPValidationError | None: + """Get a single relationship by ID.""" + from personal_crm_client.api.relationships.relationships_list_relationships import sync - def get(self, {item_id}: UUID) -> {model}Public | HTTPValidationError | None: - """Get a single {singular} by ID.""" - from personal_crm_client.api.{module} import {get_func} - return {get_func}.sync(client=self._client, {item_id}={item_id}) + relationships = self.list() + if relationships and hasattr(relationships, 'data'): + for rel in relationships.data: + if rel.id == relationship_id: + return rel + return None - async def get_async(self, {item_id}: UUID) -> {model}Public | HTTPValidationError | None: - """Async version of get().""" - from personal_crm_client.api.{module} import {get_func} - return await {get_func}.asyncio(client=self._client, {item_id}={item_id}) + def create(self, item: RelationshipCreate) -> RelationshipPublic | HTTPValidationError | None: + """Create a new relationship.""" + from personal_crm_client.api.relationships.relationships_create_relationship_route import sync - def create(self, item: {model}Create) -> {model}Public | HTTPValidationError | None: - """Create a new {singular}.""" - from personal_crm_client.api.{module} import {create_func} - return {create_func}.sync(client=self._client, json_body=item) + return sync(client=self._client, body=item) - async def create_async(self, item: {model}Create) -> {model}Public | HTTPValidationError | None: + async def create_async(self, item: RelationshipCreate) -> RelationshipPublic | HTTPValidationError | None: """Async version of create().""" - from personal_crm_client.api.{module} import {create_func} - return await {create_func}.asyncio(client=self._client, json_body=item) + from personal_crm_client.api.relationships.relationships_create_relationship_route import asyncio - def update(self, {item_id}: UUID, item: {model}Update) -> {model}Public | HTTPValidationError | None: - """Update an existing {singular}.""" - from personal_crm_client.api.{module} import {update_func} - return {update_func}.sync(client=self._client, {item_id}={item_id}, json_body=item) + return await asyncio(client=self._client, body=item) - async def update_async(self, {item_id}: UUID, item: {model}Update) -> {model}Public | HTTPValidationError | None: + def update( + self, relationship_id: UUID, item: RelationshipUpdate + ) -> RelationshipPublic | HTTPValidationError | None: + """Update an existing relationship.""" + from personal_crm_client.api.relationships.relationships_update_relationship import sync + + return sync(client=self._client, relationship_id=relationship_id, body=item) + + async def update_async( + self, relationship_id: UUID, item: RelationshipUpdate + ) -> RelationshipPublic | HTTPValidationError | None: """Async version of update().""" - from personal_crm_client.api.{module} import {update_func} - return await {update_func}.asyncio(client=self._client, {item_id}={item_id}, json_body=item) + from personal_crm_client.api.relationships.relationships_update_relationship import asyncio + + return await asyncio(client=self._client, relationship_id=relationship_id, body=item) - def delete(self, {item_id}: UUID) -> {model}Public | HTTPValidationError | None: - """Delete a {singular}.""" - from personal_crm_client.api.{module} import {delete_func} - return {delete_func}.sync(client=self._client, {item_id}={item_id}) + def delete(self, relationship_id: UUID) -> RelationshipPublic | HTTPValidationError | None: + """Delete a relationship.""" + from personal_crm_client.api.relationships.relationships_delete_relationship import sync - async def delete_async(self, {item_id}: UUID) -> {model}Public | HTTPValidationError | None: + return sync(client=self._client, relationship_id=relationship_id) + + async def delete_async( + self, relationship_id: UUID + ) -> RelationshipPublic | HTTPValidationError | None: """Async version of delete().""" - from personal_crm_client.api.{module} import {delete_func} - return await {delete_func}.asyncio(client=self._client, {item_id}={item_id}) + from personal_crm_client.api.relationships.relationships_delete_relationship import asyncio + + return await asyncio(client=self._client, relationship_id=relationship_id) + + def lookup_inverse( + self, relationship_type: str + ) -> object | HTTPValidationError | None: + """Look up the inverse of a relationship type.""" + from personal_crm_client.api.relationships.relationships_lookup_inverse import sync + + return sync(client=self._client, relationship_type=relationship_type) + + async def lookup_inverse_async( + self, relationship_type: str + ) -> object | HTTPValidationError | None: + """Async version of lookup_inverse().""" + from personal_crm_client.api.relationships.relationships_lookup_inverse import asyncio + + return await asyncio(client=self._client, relationship_type=relationship_type) diff --git a/kindred-sdk/kindred_sdk/resources/tags.py b/kindred-sdk/kindred_sdk/resources/tags.py index 687dafad..83ec111f 100644 --- a/kindred-sdk/kindred_sdk/resources/tags.py +++ b/kindred-sdk/kindred_sdk/resources/tags.py @@ -1,63 +1,88 @@ -"""{resource_name} resource for Kindred SDK.""" +"""Tags resource for Kindred SDK.""" from personal_crm_client import AuthenticatedClient, Client -from personal_crm_client.models import {model}Create, {model}Update, {models}, {model}Public -from personal_crm_client.models import HTTPValidationError +from personal_crm_client.models import ( + TagCreate, + TagUpdate, + TagPublic, + TagsPublic, + HTTPValidationError, +) from uuid import UUID +from typing import Optional -class {class_name}: - """Resource for managing {module}.""" - def __init__(self, client: AuthenticatedClient | Client): +class TagsResource: + """Resource for managing tags.""" + + def __init__(self, client: AuthenticatedClient | Client) -> None: self._client = client - def list(self, *, skip: int = 0, limit: int = 100) -> {models} | HTTPValidationError | None: - """List {module}.""" - from personal_crm_client.api.{module} import {list_func} - return {list_func}.sync(client=self._client, skip=skip, limit=limit) + def list( + self, *, skip: int = 0, limit: int = 100 + ) -> TagsPublic | HTTPValidationError | None: + """List tags.""" + from personal_crm_client.api.tags.tags_list_tags import sync + + return sync(client=self._client, skip=skip, limit=limit) - async def list_async(self, *, skip: int = 0, limit: int = 100) -> {models} | HTTPValidationError | None: + async def list_async( + self, *, skip: int = 0, limit: int = 100 + ) -> TagsPublic | HTTPValidationError | None: """Async version of list().""" - from personal_crm_client.api.{module} import {list_func} - return await {list_func}.asyncio(client=self._client, skip=skip, limit=limit) + from personal_crm_client.api.tags.tags_list_tags import asyncio + + return await asyncio(client=self._client, skip=skip, limit=limit) - def get(self, {item_id}: UUID) -> {model}Public | HTTPValidationError | None: - """Get a single {singular} by ID.""" - from personal_crm_client.api.{module} import {get_func} - return {get_func}.sync(client=self._client, {item_id}={item_id}) + def get(self, tag_id: UUID) -> TagPublic | HTTPValidationError | None: + """Get a single tag by ID.""" + from personal_crm_client.api.tags.tags_list_tags import sync - async def get_async(self, {item_id}: UUID) -> {model}Public | HTTPValidationError | None: - """Async version of get().""" - from personal_crm_client.api.{module} import {get_func} - return await {get_func}.asyncio(client=self._client, {item_id}={item_id}) + # Note: The generated client may not have a separate get function + tags = self.list() + if tags and hasattr(tags, 'data'): + for tag in tags.data: + if tag.id == tag_id: + return tag + return None - def create(self, item: {model}Create) -> {model}Public | HTTPValidationError | None: - """Create a new {singular}.""" - from personal_crm_client.api.{module} import {create_func} - return {create_func}.sync(client=self._client, json_body=item) + def create(self, item: TagCreate) -> TagPublic | HTTPValidationError | None: + """Create a new tag.""" + from personal_crm_client.api.tags.tags_create_tag_route import sync - async def create_async(self, item: {model}Create) -> {model}Public | HTTPValidationError | None: + return sync(client=self._client, body=item) + + async def create_async(self, item: TagCreate) -> TagPublic | HTTPValidationError | None: """Async version of create().""" - from personal_crm_client.api.{module} import {create_func} - return await {create_func}.asyncio(client=self._client, json_body=item) + from personal_crm_client.api.tags.tags_create_tag_route import asyncio + + return await asyncio(client=self._client, body=item) - def update(self, {item_id}: UUID, item: {model}Update) -> {model}Public | HTTPValidationError | None: - """Update an existing {singular}.""" - from personal_crm_client.api.{module} import {update_func} - return {update_func}.sync(client=self._client, {item_id}={item_id}, json_body=item) + def update( + self, tag_id: UUID, item: TagUpdate + ) -> TagPublic | HTTPValidationError | None: + """Update an existing tag.""" + from personal_crm_client.api.tags.tags_update_tag import sync - async def update_async(self, {item_id}: UUID, item: {model}Update) -> {model}Public | HTTPValidationError | None: + return sync(client=self._client, tag_id=tag_id, body=item) + + async def update_async( + self, tag_id: UUID, item: TagUpdate + ) -> TagPublic | HTTPValidationError | None: """Async version of update().""" - from personal_crm_client.api.{module} import {update_func} - return await {update_func}.asyncio(client=self._client, {item_id}={item_id}, json_body=item) + from personal_crm_client.api.tags.tags_update_tag import asyncio + + return await asyncio(client=self._client, tag_id=tag_id, body=item) - def delete(self, {item_id}: UUID) -> {model}Public | HTTPValidationError | None: - """Delete a {singular}.""" - from personal_crm_client.api.{module} import {delete_func} - return {delete_func}.sync(client=self._client, {item_id}={item_id}) + def delete(self, tag_id: UUID) -> TagPublic | HTTPValidationError | None: + """Delete a tag.""" + from personal_crm_client.api.tags.tags_delete_tag import sync - async def delete_async(self, {item_id}: UUID) -> {model}Public | HTTPValidationError | None: + return sync(client=self._client, tag_id=tag_id) + + async def delete_async(self, tag_id: UUID) -> TagPublic | HTTPValidationError | None: """Async version of delete().""" - from personal_crm_client.api.{module} import {delete_func} - return await {delete_func}.asyncio(client=self._client, {item_id}={item_id}) + from personal_crm_client.api.tags.tags_delete_tag import asyncio + + return await asyncio(client=self._client, tag_id=tag_id) From e7e54d9da7455d2001861377387ee4c16b2fd909 Mon Sep 17 00:00:00 2001 From: Will Pike Date: Sat, 9 May 2026 21:49:33 -0500 Subject: [PATCH 3/3] chore(pr-sweep): auto-repair failing gates Repaired by run-pr-sweep.py via deepseek-v4-pro on Ollama Cloud. Gates touched: - precommit (exit 1) - precommit (exit 0) - precommit (exit 0) - typecheck (exit 0) - pytest (exit 0) - e2e (exit 0) --- backend/tests/api/routes/test_life_events.py | 4 +- backend/tests/api/routes/test_pets.py | 4 +- kindred-sdk/kindred_sdk/__init__.py | 18 +- kindred-sdk/kindred_sdk/client.py | 19 +- .../kindred_sdk/resources/activity_logs.py | 7 +- .../kindred_sdk/resources/addresses.py | 28 ++- kindred-sdk/kindred_sdk/resources/calendar.py | 8 +- kindred-sdk/kindred_sdk/resources/contacts.py | 64 +++---- .../kindred_sdk/resources/custom_fields.py | 84 +++++++-- kindred-sdk/kindred_sdk/resources/debts.py | 26 +-- kindred-sdk/kindred_sdk/resources/gifts.py | 26 +-- kindred-sdk/kindred_sdk/resources/groups.py | 124 ++++++++----- .../kindred_sdk/resources/interactions.py | 37 ++-- kindred-sdk/kindred_sdk/resources/journal.py | 22 +-- .../kindred_sdk/resources/life_events.py | 24 +-- kindred-sdk/kindred_sdk/resources/notes.py | 128 +++++++++----- kindred-sdk/kindred_sdk/resources/pets.py | 128 +++++++++----- .../kindred_sdk/resources/relationships.py | 28 ++- .../kindred_sdk/resources/reminders.py | 152 +++++++++++----- kindred-sdk/kindred_sdk/resources/tags.py | 28 +-- kindred-sdk/personal_crm_client/__init__.py | 2 +- .../personal_crm_client/api/__init__.py | 2 +- .../api/activity_logs/__init__.py | 2 +- .../activity_logs_list_activity_logs.py | 115 +++++------- .../api/addresses/__init__.py | 2 +- .../addresses_create_address_route.py | 77 +++----- .../api/addresses/addresses_delete_address.py | 81 ++++----- .../api/addresses/addresses_list_addresses.py | 81 ++++----- .../api/addresses/addresses_update_address.py | 92 ++++------ .../api/calendar/__init__.py | 2 +- .../calendar/calendar_get_calendar_month.py | 81 ++++----- .../api/carddav/__init__.py | 2 +- .../api/carddav/carddav_well_known_carddav.py | 46 ++--- .../api/contact_fields/__init__.py | 2 +- ...ntact_fields_create_contact_field_route.py | 77 +++----- .../contact_fields_delete_contact_field.py | 81 ++++----- .../contact_fields_list_contact_fields.py | 100 +++++------ .../contact_fields_update_contact_field.py | 92 ++++------ .../api/contacts/__init__.py | 2 +- .../api/contacts/contacts_create_contact.py | 77 +++----- .../api/contacts/contacts_delete_contact.py | 81 ++++----- .../api/contacts/contacts_get_contact.py | 83 ++++----- .../contacts_get_contact_household.py | 81 ++++----- .../contacts_list_contact_mentions.py | 85 ++++----- .../api/contacts/contacts_list_contacts.py | 164 ++++++++---------- .../contacts/contacts_list_losing_touch.py | 79 +++------ .../api/contacts/contacts_restore_contact.py | 83 ++++----- .../api/contacts/contacts_update_contact.py | 92 ++++------ .../api/custom_fields/__init__.py | 2 +- .../custom_fields_create_field_definition.py | 77 +++----- .../custom_fields_create_field_value.py | 77 +++----- .../custom_fields_delete_field_definition.py | 81 ++++----- .../custom_fields_delete_field_value.py | 81 ++++----- .../custom_fields_list_field_definitions.py | 46 ++--- .../custom_fields_list_field_values.py | 81 ++++----- .../custom_fields_update_field_definition.py | 92 ++++------ .../custom_fields_update_field_value.py | 92 ++++------ .../personal_crm_client/api/debts/__init__.py | 2 +- .../api/debts/debts_create_debt_route.py | 77 +++----- .../api/debts/debts_delete_debt.py | 81 ++++----- .../api/debts/debts_list_debts.py | 83 ++++----- .../api/debts/debts_update_debt.py | 92 ++++------ .../personal_crm_client/api/gifts/__init__.py | 2 +- .../api/gifts/gifts_create_gift_route.py | 77 +++----- .../api/gifts/gifts_delete_gift.py | 81 ++++----- .../api/gifts/gifts_list_gifts.py | 83 ++++----- .../api/gifts/gifts_update_gift.py | 92 ++++------ .../api/groups/__init__.py | 2 +- .../api/groups/groups_create_group_route.py | 77 +++----- .../api/groups/groups_delete_group.py | 81 ++++----- .../api/groups/groups_list_groups.py | 89 ++++------ .../api/groups/groups_update_group.py | 92 ++++------ .../api/import_export/__init__.py | 2 +- .../import_export_export_json.py | 46 ++--- .../import_export_export_vcard.py | 46 ++--- .../import_export_import_vcard.py | 76 +++----- .../api/interactions/__init__.py | 2 +- .../interactions_create_interaction_route.py | 77 +++----- .../interactions_delete_interaction.py | 81 ++++----- .../interactions_list_interactions.py | 99 ++++------- .../interactions_update_interaction.py | 92 ++++------ .../api/journal/__init__.py | 2 +- .../journal_create_journal_entry_route.py | 77 +++----- .../journal/journal_delete_journal_entry.py | 81 ++++----- .../journal/journal_list_journal_entries.py | 89 ++++------ .../journal/journal_update_journal_entry.py | 92 ++++------ .../api/life_events/__init__.py | 2 +- .../life_events_create_life_event_route.py | 77 +++----- .../life_events_delete_life_event.py | 81 ++++----- .../life_events_list_life_events.py | 83 ++++----- .../life_events_update_life_event.py | 92 ++++------ .../personal_crm_client/api/login/__init__.py | 2 +- .../api/login/login_login_access_token.py | 76 +++----- .../api/login/login_recover_password.py | 81 ++++----- .../login_recover_password_html_content.py | 79 ++++----- .../api/login/login_reset_password.py | 77 +++----- .../api/login/login_test_token.py | 73 +++----- .../api/media_recommendations/__init__.py | 2 +- ...tions_create_media_recommendation_route.py | 77 +++----- ...mmendations_delete_media_recommendation.py | 81 ++++----- ...ommendations_list_media_recommendations.py | 83 ++++----- ...mmendations_update_media_recommendation.py | 92 ++++------ .../personal_crm_client/api/notes/__init__.py | 2 +- .../api/notes/notes_create_note_route.py | 77 +++----- .../api/notes/notes_delete_note.py | 81 ++++----- .../api/notes/notes_list_notes.py | 102 +++++------ .../api/notes/notes_update_note_route.py | 92 ++++------ .../personal_crm_client/api/pets/__init__.py | 2 +- .../api/pets/pets_create_pet_route.py | 77 +++----- .../api/pets/pets_delete_pet.py | 81 ++++----- .../api/pets/pets_list_pets.py | 81 ++++----- .../api/pets/pets_update_pet.py | 92 ++++------ .../api/private/__init__.py | 2 +- .../api/private/private_create_user.py | 77 +++----- .../api/relationships/__init__.py | 2 +- ...relationships_create_relationship_route.py | 77 +++----- .../relationships_delete_relationship.py | 81 ++++----- .../relationships_list_relationships.py | 81 ++++----- .../relationships_lookup_inverse.py | 82 ++++----- .../relationships_update_relationship.py | 92 ++++------ .../api/reminders/__init__.py | 2 +- .../reminders_create_reminder_route.py | 77 +++----- .../reminders/reminders_delete_reminder.py | 81 ++++----- .../api/reminders/reminders_list_reminders.py | 97 ++++------- .../reminders/reminders_snooze_reminder.py | 92 ++++------ .../reminders/reminders_update_reminder.py | 92 ++++------ .../api/tag_shares/__init__.py | 2 +- .../tag_shares/tag_shares_create_tag_share.py | 77 +++----- .../tag_shares/tag_shares_delete_tag_share.py | 98 +++++------ .../tag_shares/tag_shares_list_tag_shares.py | 80 ++++----- .../personal_crm_client/api/tags/__init__.py | 2 +- .../api/tags/tags_create_tag_route.py | 77 +++----- .../api/tags/tags_delete_tag.py | 81 ++++----- .../api/tags/tags_list_tags.py | 89 ++++------ .../api/tags/tags_update_tag.py | 92 ++++------ .../personal_crm_client/api/users/__init__.py | 2 +- .../api/users/users_create_user.py | 77 +++----- .../api/users/users_delete_user.py | 83 ++++----- .../api/users/users_delete_user_me.py | 73 +++----- .../api/users/users_read_user_by_id.py | 83 ++++----- .../api/users/users_read_user_me.py | 73 +++----- .../api/users/users_read_users.py | 89 ++++------ .../api/users/users_register_user.py | 77 +++----- .../api/users/users_update_password_me.py | 77 +++----- .../api/users/users_update_user.py | 92 ++++------ .../api/users/users_update_user_me.py | 77 +++----- .../personal_crm_client/api/utils/__init__.py | 2 +- .../api/utils/utils_health_check.py | 68 +++----- .../api/utils/utils_test_email.py | 78 +++------ .../api/webhooks/__init__.py | 2 +- .../api/webhooks/webhooks_create_webhook.py | 75 +++----- .../api/webhooks/webhooks_delete_webhook.py | 81 ++++----- .../api/webhooks/webhooks_inbound_webhook.py | 88 ++++------ .../api/webhooks/webhooks_list_webhooks.py | 46 ++--- .../api/webhooks/webhooks_update_webhook.py | 90 ++++------ kindred-sdk/personal_crm_client/client.py | 7 +- kindred-sdk/personal_crm_client/errors.py | 4 +- .../personal_crm_client/models/__init__.py | 10 +- .../models/activity_log_public.py | 88 ++++------ ...activity_log_public_changes_json_type_0.py | 25 +-- .../models/activity_logs_public.py | 49 ++---- .../models/address_create.py | 68 +++----- .../models/address_public.py | 75 +++----- .../models/address_update.py | 56 ++---- .../models/body_import_export_import_vcard.py | 54 ++---- .../models/body_login_login_access_token.py | 52 ++---- .../models/calendar_entry.py | 54 ++---- .../models/calendar_month_response.py | 45 ++--- .../models/calendar_month_response_days.py | 35 +--- .../models/contact_create.py | 106 ++++------- .../models/contact_field_create.py | 58 ++----- .../models/contact_field_public.py | 65 +++---- .../models/contact_field_type.py | 1 + .../models/contact_field_update.py | 46 ++--- .../models/contact_public.py | 147 +++++----------- .../models/contact_update.py | 106 ++++------- .../models/contacts_public.py | 49 ++---- .../models/custom_field_definition_create.py | 48 ++--- .../models/custom_field_definition_public.py | 68 +++----- .../models/custom_field_definition_update.py | 44 ++--- .../models/custom_field_value_create.py | 51 ++---- .../models/custom_field_value_public.py | 61 ++----- .../models/custom_field_value_update.py | 32 +--- .../personal_crm_client/models/debt_create.py | 69 +++----- .../models/debt_direction.py | 1 + .../personal_crm_client/models/debt_public.py | 83 +++------ .../personal_crm_client/models/debt_update.py | 55 ++---- .../models/debts_public.py | 49 ++---- .../personal_crm_client/models/gift_create.py | 77 +++----- .../personal_crm_client/models/gift_public.py | 91 +++------- .../personal_crm_client/models/gift_status.py | 1 + .../personal_crm_client/models/gift_update.py | 61 ++----- .../models/gifts_public.py | 49 ++---- .../models/group_create.py | 38 ++-- .../models/group_public.py | 58 ++----- .../models/group_update.py | 35 +--- .../models/groups_public.py | 49 ++---- .../models/http_validation_error.py | 37 +--- .../models/interaction_attendee_summary.py | 50 ++---- .../models/interaction_channel.py | 1 + .../models/interaction_create.py | 71 +++----- .../models/interaction_public.py | 83 +++------ .../models/interaction_update.py | 62 ++----- .../models/interactions_public.py | 49 ++---- .../models/journal_entries_public.py | 49 ++---- .../models/journal_entry_create.py | 49 ++---- .../models/journal_entry_public.py | 72 +++----- .../models/journal_entry_update.py | 44 ++--- .../models/life_event_create.py | 66 +++---- .../models/life_event_public.py | 80 +++------ .../models/life_event_update.py | 50 ++---- .../models/life_events_public.py | 49 ++---- .../models/media_category.py | 1 + .../models/media_recommendation_create.py | 66 +++---- .../models/media_recommendation_public.py | 87 +++------- .../models/media_recommendation_update.py | 52 ++---- .../models/media_recommendations_public.py | 49 ++---- .../models/mention_source_contact.py | 50 ++---- .../personal_crm_client/models/message.py | 35 ++-- .../models/new_password.py | 39 ++--- .../personal_crm_client/models/note_create.py | 44 ++--- .../models/note_mention_public.py | 63 +++---- .../personal_crm_client/models/note_public.py | 68 +++----- .../personal_crm_client/models/note_update.py | 32 +--- .../models/notes_public.py | 49 ++---- .../personal_crm_client/models/pet_create.py | 53 ++---- .../personal_crm_client/models/pet_public.py | 60 ++----- .../personal_crm_client/models/pet_update.py | 41 ++--- .../models/private_user_create.py | 44 ++--- .../models/relationship_create.py | 59 ++----- .../models/relationship_public.py | 66 ++----- .../models/relationship_update.py | 35 +--- ...e_response_relationships_lookup_inverse.py | 29 +--- .../models/reminder_create.py | 66 +++---- .../models/reminder_frequency.py | 1 + .../models/reminder_public.py | 96 ++++------ .../models/reminder_update.py | 52 ++---- .../models/reminders_public.py | 49 ++---- .../personal_crm_client/models/share_in.py | 47 ++--- .../personal_crm_client/models/tag_create.py | 38 ++-- .../personal_crm_client/models/tag_public.py | 58 ++----- .../models/tag_share_public.py | 61 ++----- ...re_response_tag_shares_delete_tag_share.py | 25 +-- .../models/tag_shares_public.py | 49 ++---- .../personal_crm_client/models/tag_update.py | 35 +--- .../personal_crm_client/models/tags_public.py | 49 ++---- .../personal_crm_client/models/token.py | 38 ++-- .../models/update_password.py | 39 ++--- .../personal_crm_client/models/user_create.py | 46 ++--- .../personal_crm_client/models/user_public.py | 60 ++----- .../models/user_register.py | 42 ++--- .../personal_crm_client/models/user_update.py | 42 ++--- .../models/user_update_me.py | 35 +--- .../models/users_public.py | 49 ++---- .../models/validation_error.py | 60 +++---- .../models/validation_error_context.py | 25 +-- .../models/webhook_endpoint_base.py | 50 ++---- .../webhooks_inbound_webhook_payload.py | 25 +-- kindred-sdk/personal_crm_client/py.typed | 2 +- kindred-sdk/personal_crm_client/types.py | 11 +- openapi.json | 1 - 261 files changed, 5474 insertions(+), 9567 deletions(-) delete mode 100644 openapi.json diff --git a/backend/tests/api/routes/test_life_events.py b/backend/tests/api/routes/test_life_events.py index b077b814..2b9e3ba5 100644 --- a/backend/tests/api/routes/test_life_events.py +++ b/backend/tests/api/routes/test_life_events.py @@ -229,9 +229,7 @@ def test_delete_life_event_not_found( assert r.status_code == 404 -def test_life_event_isolation_between_users( - client: TestClient, db: Session -) -> None: +def test_life_event_isolation_between_users(client: TestClient, db: Session) -> None: from tests.utils.user import ( authentication_token_from_email, create_random_user, diff --git a/backend/tests/api/routes/test_pets.py b/backend/tests/api/routes/test_pets.py index 2b14cc8b..864821fc 100644 --- a/backend/tests/api/routes/test_pets.py +++ b/backend/tests/api/routes/test_pets.py @@ -84,9 +84,7 @@ def test_create_pet_unknown_contact_404( assert r.status_code == 404 -def test_list_pets( - client: TestClient, superuser_token_headers: dict[str, str] -) -> None: +def test_list_pets(client: TestClient, superuser_token_headers: dict[str, str]) -> None: contact_id = _create_contact(client, superuser_token_headers) client.post( f"{settings.API_V1_STR}/pets/", diff --git a/kindred-sdk/kindred_sdk/__init__.py b/kindred-sdk/kindred_sdk/__init__.py index fd340fba..eb8acddf 100644 --- a/kindred-sdk/kindred_sdk/__init__.py +++ b/kindred-sdk/kindred_sdk/__init__.py @@ -1,22 +1,22 @@ """Kindred SDK - A typed Python client for Personal CRM.""" from .client import KindredClient +from .resources.activity_logs import ActivityLogsResource +from .resources.addresses import AddressesResource +from .resources.calendar import CalendarResource from .resources.contacts import ContactsResource +from .resources.custom_fields import CustomFieldsResource +from .resources.debts import DebtsResource +from .resources.gifts import GiftsResource from .resources.groups import GroupsResource from .resources.interactions import InteractionsResource -from .resources.tags import TagsResource +from .resources.journal import JournalResource +from .resources.life_events import LifeEventsResource from .resources.notes import NotesResource -from .resources.gifts import GiftsResource -from .resources.debts import DebtsResource from .resources.pets import PetsResource -from .resources.addresses import AddressesResource from .resources.relationships import RelationshipsResource from .resources.reminders import RemindersResource -from .resources.life_events import LifeEventsResource -from .resources.journal import JournalResource -from .resources.custom_fields import CustomFieldsResource -from .resources.activity_logs import ActivityLogsResource -from .resources.calendar import CalendarResource +from .resources.tags import TagsResource __all__ = [ "KindredClient", diff --git a/kindred-sdk/kindred_sdk/client.py b/kindred-sdk/kindred_sdk/client.py index 71819806..76c75126 100644 --- a/kindred-sdk/kindred_sdk/client.py +++ b/kindred-sdk/kindred_sdk/client.py @@ -1,24 +1,23 @@ """Kindred SDK client for Personal CRM.""" from personal_crm_client import AuthenticatedClient, Client -from personal_crm_client.models import HTTPValidationError +from .resources.activity_logs import ActivityLogsResource +from .resources.addresses import AddressesResource +from .resources.calendar import CalendarResource from .resources.contacts import ContactsResource +from .resources.custom_fields import CustomFieldsResource +from .resources.debts import DebtsResource +from .resources.gifts import GiftsResource from .resources.groups import GroupsResource from .resources.interactions import InteractionsResource -from .resources.tags import TagsResource +from .resources.journal import JournalResource +from .resources.life_events import LifeEventsResource from .resources.notes import NotesResource -from .resources.gifts import GiftsResource -from .resources.debts import DebtsResource from .resources.pets import PetsResource -from .resources.addresses import AddressesResource from .resources.relationships import RelationshipsResource from .resources.reminders import RemindersResource -from .resources.life_events import LifeEventsResource -from .resources.journal import JournalResource -from .resources.custom_fields import CustomFieldsResource -from .resources.activity_logs import ActivityLogsResource -from .resources.calendar import CalendarResource +from .resources.tags import TagsResource class KindredClient: diff --git a/kindred-sdk/kindred_sdk/resources/activity_logs.py b/kindred-sdk/kindred_sdk/resources/activity_logs.py index d58befd3..e86c4564 100644 --- a/kindred-sdk/kindred_sdk/resources/activity_logs.py +++ b/kindred-sdk/kindred_sdk/resources/activity_logs.py @@ -2,13 +2,10 @@ from personal_crm_client import AuthenticatedClient, Client from personal_crm_client.models import ( - ActivityLogPublic, ActivityLogsPublic, HTTPValidationError, ) -from typing import Optional - class ActivityLogsResource: """Resource for reading activity logs (read-only).""" @@ -21,7 +18,7 @@ def list( *, skip: int = 0, limit: int = 100, - contact_id: Optional[str] = None, + contact_id: str | None = None, ) -> ActivityLogsPublic | HTTPValidationError | None: """List activity logs.""" from personal_crm_client.api.activity_logs.activity_logs_list_activity_logs import sync @@ -38,7 +35,7 @@ async def list_async( *, skip: int = 0, limit: int = 100, - contact_id: Optional[str] = None, + contact_id: str | None = None, ) -> ActivityLogsPublic | HTTPValidationError | None: """Async version of list().""" from personal_crm_client.api.activity_logs.activity_logs_list_activity_logs import asyncio diff --git a/kindred-sdk/kindred_sdk/resources/addresses.py b/kindred-sdk/kindred_sdk/resources/addresses.py index a130f195..1b38e9db 100644 --- a/kindred-sdk/kindred_sdk/resources/addresses.py +++ b/kindred-sdk/kindred_sdk/resources/addresses.py @@ -1,16 +1,15 @@ """Addresses resource for Kindred SDK.""" +from uuid import UUID + from personal_crm_client import AuthenticatedClient, Client from personal_crm_client.models import ( AddressCreate, - AddressUpdate, - AddressPublic, AddressesPublic, + AddressPublic, + AddressUpdate, HTTPValidationError, ) -from uuid import UUID - -from typing import Optional class AddressesResource: @@ -24,7 +23,7 @@ def list( *, skip: int = 0, limit: int = 100, - contact_id: Optional[UUID] = None, + contact_id: UUID | None = None, ) -> AddressesPublic | HTTPValidationError | None: """List addresses.""" from personal_crm_client.api.addresses.addresses_list_addresses import sync @@ -41,7 +40,7 @@ async def list_async( *, skip: int = 0, limit: int = 100, - contact_id: Optional[UUID] = None, + contact_id: UUID | None = None, ) -> AddressesPublic | HTTPValidationError | None: """Async version of list().""" from personal_crm_client.api.addresses.addresses_list_addresses import asyncio @@ -55,10 +54,9 @@ async def list_async( def get(self, address_id: UUID) -> AddressPublic | HTTPValidationError | None: """Get a single address by ID.""" - from personal_crm_client.api.addresses.addresses_list_addresses import sync addresses = self.list() - if addresses and hasattr(addresses, 'data'): + if addresses and hasattr(addresses, "data"): for address in addresses.data: if address.id == address_id: return address @@ -76,17 +74,13 @@ async def create_async(self, item: AddressCreate) -> AddressPublic | HTTPValidat return await asyncio(client=self._client, body=item) - def update( - self, address_id: UUID, item: AddressUpdate - ) -> AddressPublic | HTTPValidationError | None: + def update(self, address_id: UUID, item: AddressUpdate) -> AddressPublic | HTTPValidationError | None: """Update an existing address.""" from personal_crm_client.api.addresses.addresses_update_address import sync return sync(client=self._client, address_id=address_id, body=item) - async def update_async( - self, address_id: UUID, item: AddressUpdate - ) -> AddressPublic | HTTPValidationError | None: + async def update_async(self, address_id: UUID, item: AddressUpdate) -> AddressPublic | HTTPValidationError | None: """Async version of update().""" from personal_crm_client.api.addresses.addresses_update_address import asyncio @@ -98,9 +92,7 @@ def delete(self, address_id: UUID) -> AddressPublic | HTTPValidationError | None return sync(client=self._client, address_id=address_id) - async def delete_async( - self, address_id: UUID - ) -> AddressPublic | HTTPValidationError | None: + async def delete_async(self, address_id: UUID) -> AddressPublic | HTTPValidationError | None: """Async version of delete().""" from personal_crm_client.api.addresses.addresses_delete_address import asyncio diff --git a/kindred-sdk/kindred_sdk/resources/calendar.py b/kindred-sdk/kindred_sdk/resources/calendar.py index 1fa82058..c01646fe 100644 --- a/kindred-sdk/kindred_sdk/resources/calendar.py +++ b/kindred-sdk/kindred_sdk/resources/calendar.py @@ -13,9 +13,7 @@ class CalendarResource: def __init__(self, client: AuthenticatedClient | Client) -> None: self._client = client - def get_month( - self, *, year: int, month: int - ) -> CalendarMonthResponse | HTTPValidationError | None: + def get_month(self, *, year: int, month: int) -> CalendarMonthResponse | HTTPValidationError | None: """Get calendar data for a specific month.""" from personal_crm_client.api.calendar.calendar_get_calendar_month import sync @@ -25,9 +23,7 @@ def get_month( month=month, ) - async def get_month_async( - self, *, year: int, month: int - ) -> CalendarMonthResponse | HTTPValidationError | None: + async def get_month_async(self, *, year: int, month: int) -> CalendarMonthResponse | HTTPValidationError | None: """Async version of get_month().""" from personal_crm_client.api.calendar.calendar_get_calendar_month import asyncio diff --git a/kindred-sdk/kindred_sdk/resources/contacts.py b/kindred-sdk/kindred_sdk/resources/contacts.py index 350abd0a..68a616d1 100644 --- a/kindred-sdk/kindred_sdk/resources/contacts.py +++ b/kindred-sdk/kindred_sdk/resources/contacts.py @@ -1,17 +1,15 @@ """Contacts resource for Kindred SDK.""" +from uuid import UUID + from personal_crm_client import AuthenticatedClient, Client from personal_crm_client.models import ( ContactCreate, - ContactUpdate, ContactPublic, ContactsPublic, + ContactUpdate, HTTPValidationError, ) -from personal_crm_client.models import HTTPValidationError -from uuid import UUID - -from typing import Optional class ContactsResource: @@ -25,15 +23,15 @@ def list( *, skip: int = 0, limit: int = 100, - search: Optional[str] = None, - tag_id: Optional[UUID] = None, - group_id: Optional[UUID] = None, - is_favorite: Optional[bool] = None, - is_archived: Optional[bool] = None, - stage: Optional[str] = None, + search: str | None = None, + tag_id: UUID | None = None, + group_id: UUID | None = None, + is_favorite: bool | None = None, + is_archived: bool | None = None, + stage: str | None = None, include_deleted: bool = False, only_deleted: bool = False, - ids: Optional[list[UUID]] = None, + ids: list[UUID] | None = None, ) -> ContactsPublic | HTTPValidationError | None: """List contacts with filtering. @@ -68,15 +66,15 @@ async def list_async( *, skip: int = 0, limit: int = 100, - search: Optional[str] = None, - tag_id: Optional[UUID] = None, - group_id: Optional[UUID] = None, - is_favorite: Optional[bool] = None, - is_archived: Optional[bool] = None, - stage: Optional[str] = None, + search: str | None = None, + tag_id: UUID | None = None, + group_id: UUID | None = None, + is_favorite: bool | None = None, + is_archived: bool | None = None, + stage: str | None = None, include_deleted: bool = False, only_deleted: bool = False, - ids: Optional[list[UUID]] = None, + ids: list[UUID] | None = None, ) -> ContactsPublic | HTTPValidationError | None: """Async version of list().""" from personal_crm_client.api.contacts.contacts_list_contacts import asyncio @@ -132,9 +130,7 @@ async def create_async(self, item: ContactCreate) -> ContactPublic | HTTPValidat body=item, ) - def update( - self, contact_id: UUID, item: ContactUpdate - ) -> ContactPublic | HTTPValidationError | None: + def update(self, contact_id: UUID, item: ContactUpdate) -> ContactPublic | HTTPValidationError | None: """Update an existing contact.""" from personal_crm_client.api.contacts.contacts_update_contact import sync @@ -144,9 +140,7 @@ def update( body=item, ) - async def update_async( - self, contact_id: UUID, item: ContactUpdate - ) -> ContactPublic | HTTPValidationError | None: + async def update_async(self, contact_id: UUID, item: ContactUpdate) -> ContactPublic | HTTPValidationError | None: """Async version of update().""" from personal_crm_client.api.contacts.contacts_update_contact import asyncio @@ -192,9 +186,7 @@ async def restore_async(self, contact_id: UUID) -> ContactPublic | HTTPValidatio contact_id=contact_id, ) - def list_mentions( - self, contact_id: UUID - ) -> list | HTTPValidationError | None: + def list_mentions(self, contact_id: UUID) -> list | HTTPValidationError | None: """List mentions of a contact in notes.""" from personal_crm_client.api.contacts.contacts_list_contact_mentions import sync @@ -203,9 +195,7 @@ def list_mentions( contact_id=contact_id, ) - async def list_mentions_async( - self, contact_id: UUID - ) -> list | HTTPValidationError | None: + async def list_mentions_async(self, contact_id: UUID) -> list | HTTPValidationError | None: """Async version of list_mentions().""" from personal_crm_client.api.contacts.contacts_list_contact_mentions import asyncio @@ -219,7 +209,7 @@ def list_losing_touch( *, skip: int = 0, limit: int = 100, - search: Optional[str] = None, + search: str | None = None, ) -> list | HTTPValidationError | None: """List contacts you're losing touch with.""" from personal_crm_client.api.contacts.contacts_list_losing_touch import sync @@ -236,7 +226,7 @@ async def list_losing_touch_async( *, skip: int = 0, limit: int = 100, - search: Optional[str] = None, + search: str | None = None, ) -> list | HTTPValidationError | None: """Async version of list_losing_touch().""" from personal_crm_client.api.contacts.contacts_list_losing_touch import asyncio @@ -248,9 +238,7 @@ async def list_losing_touch_async( search=search, ) - def get_household( - self, contact_id: UUID - ) -> list | HTTPValidationError | None: + def get_household(self, contact_id: UUID) -> list | HTTPValidationError | None: """Get household members for a contact.""" from personal_crm_client.api.contacts.contacts_get_contact_household import sync @@ -259,9 +247,7 @@ def get_household( contact_id=contact_id, ) - async def get_household_async( - self, contact_id: UUID - ) -> list | HTTPValidationError | None: + async def get_household_async(self, contact_id: UUID) -> list | HTTPValidationError | None: """Async version of get_household().""" from personal_crm_client.api.contacts.contacts_get_contact_household import asyncio diff --git a/kindred-sdk/kindred_sdk/resources/custom_fields.py b/kindred-sdk/kindred_sdk/resources/custom_fields.py index 52f58930..823d175d 100644 --- a/kindred-sdk/kindred_sdk/resources/custom_fields.py +++ b/kindred-sdk/kindred_sdk/resources/custom_fields.py @@ -1,13 +1,19 @@ """CustomFields resource for Kindred SDK.""" +from uuid import UUID + from personal_crm_client import AuthenticatedClient, Client from personal_crm_client.models import ( - CustomFieldDefinitionCreate, CustomFieldDefinitionUpdate, CustomFieldDefinitionsPublic, - CustomFieldDefinitionPublic, CustomFieldValueCreate, CustomFieldValueUpdate, - CustomFieldValuesPublic, CustomFieldValuePublic + CustomFieldDefinitionCreate, + CustomFieldDefinitionPublic, + CustomFieldDefinitionsPublic, + CustomFieldDefinitionUpdate, + CustomFieldValueCreate, + CustomFieldValuePublic, + CustomFieldValuesPublic, + CustomFieldValueUpdate, + HTTPValidationError, ) -from personal_crm_client.models import HTTPValidationError -from uuid import UUID class CustomFieldsResource: @@ -17,83 +23,125 @@ def __init__(self, client: AuthenticatedClient | Client): self._client = client # Field Definitions - def list_definitions(self, *, skip: int = 0, limit: int = 100) -> CustomFieldDefinitionsPublic | HTTPValidationError | None: + def list_definitions( + self, *, skip: int = 0, limit: int = 100 + ) -> CustomFieldDefinitionsPublic | HTTPValidationError | None: """List custom field definitions.""" from personal_crm_client.api.custom_fields import custom_fields_list_field_definitions + return custom_fields_list_field_definitions.sync(client=self._client, skip=skip, limit=limit) - async def list_definitions_async(self, *, skip: int = 0, limit: int = 100) -> CustomFieldDefinitionsPublic | HTTPValidationError | None: + async def list_definitions_async( + self, *, skip: int = 0, limit: int = 100 + ) -> CustomFieldDefinitionsPublic | HTTPValidationError | None: """Async version of list_definitions().""" from personal_crm_client.api.custom_fields import custom_fields_list_field_definitions + return await custom_fields_list_field_definitions.asyncio(client=self._client, skip=skip, limit=limit) - def create_definition(self, definition: CustomFieldDefinitionCreate) -> CustomFieldDefinitionPublic | HTTPValidationError | None: + def create_definition( + self, definition: CustomFieldDefinitionCreate + ) -> CustomFieldDefinitionPublic | HTTPValidationError | None: """Create a new custom field definition.""" from personal_crm_client.api.custom_fields import custom_fields_create_field_definition + return custom_fields_create_field_definition.sync(client=self._client, json_body=definition) - async def create_definition_async(self, definition: CustomFieldDefinitionCreate) -> CustomFieldDefinitionPublic | HTTPValidationError | None: + async def create_definition_async( + self, definition: CustomFieldDefinitionCreate + ) -> CustomFieldDefinitionPublic | HTTPValidationError | None: """Async version of create_definition().""" from personal_crm_client.api.custom_fields import custom_fields_create_field_definition + return await custom_fields_create_field_definition.asyncio(client=self._client, json_body=definition) - def update_definition(self, field_id: UUID, definition: CustomFieldDefinitionUpdate) -> CustomFieldDefinitionPublic | HTTPValidationError | None: + def update_definition( + self, field_id: UUID, definition: CustomFieldDefinitionUpdate + ) -> CustomFieldDefinitionPublic | HTTPValidationError | None: """Update a custom field definition.""" from personal_crm_client.api.custom_fields import custom_fields_update_field_definition + return custom_fields_update_field_definition.sync(client=self._client, field_id=field_id, json_body=definition) - async def update_definition_async(self, field_id: UUID, definition: CustomFieldDefinitionUpdate) -> CustomFieldDefinitionPublic | HTTPValidationError | None: + async def update_definition_async( + self, field_id: UUID, definition: CustomFieldDefinitionUpdate + ) -> CustomFieldDefinitionPublic | HTTPValidationError | None: """Async version of update_definition().""" from personal_crm_client.api.custom_fields import custom_fields_update_field_definition - return await custom_fields_update_field_definition.asyncio(client=self._client, field_id=field_id, json_body=definition) + + return await custom_fields_update_field_definition.asyncio( + client=self._client, field_id=field_id, json_body=definition + ) def delete_definition(self, field_id: UUID) -> CustomFieldDefinitionPublic | HTTPValidationError | None: """Delete a custom field definition.""" from personal_crm_client.api.custom_fields import custom_fields_delete_field_definition + return custom_fields_delete_field_definition.sync(client=self._client, field_id=field_id) async def delete_definition_async(self, field_id: UUID) -> CustomFieldDefinitionPublic | HTTPValidationError | None: """Async version of delete_definition().""" from personal_crm_client.api.custom_fields import custom_fields_delete_field_definition + return await custom_fields_delete_field_definition.asyncio(client=self._client, field_id=field_id) # Field Values - def list_values(self, *, contact_id: UUID, skip: int = 0, limit: int = 100) -> CustomFieldValuesPublic | HTTPValidationError | None: + def list_values( + self, *, contact_id: UUID, skip: int = 0, limit: int = 100 + ) -> CustomFieldValuesPublic | HTTPValidationError | None: """List custom field values for a contact.""" from personal_crm_client.api.custom_fields import custom_fields_list_field_values + return custom_fields_list_field_values.sync(client=self._client, contact_id=contact_id, skip=skip, limit=limit) - async def list_values_async(self, *, contact_id: UUID, skip: int = 0, limit: int = 100) -> CustomFieldValuesPublic | HTTPValidationError | None: + async def list_values_async( + self, *, contact_id: UUID, skip: int = 0, limit: int = 100 + ) -> CustomFieldValuesPublic | HTTPValidationError | None: """Async version of list_values().""" from personal_crm_client.api.custom_fields import custom_fields_list_field_values - return await custom_fields_list_field_values.asyncio(client=self._client, contact_id=contact_id, skip=skip, limit=limit) + + return await custom_fields_list_field_values.asyncio( + client=self._client, contact_id=contact_id, skip=skip, limit=limit + ) def create_value(self, value: CustomFieldValueCreate) -> CustomFieldValuePublic | HTTPValidationError | None: """Create a new custom field value.""" from personal_crm_client.api.custom_fields import custom_fields_create_field_value + return custom_fields_create_field_value.sync(client=self._client, json_body=value) - async def create_value_async(self, value: CustomFieldValueCreate) -> CustomFieldValuePublic | HTTPValidationError | None: + async def create_value_async( + self, value: CustomFieldValueCreate + ) -> CustomFieldValuePublic | HTTPValidationError | None: """Async version of create_value().""" from personal_crm_client.api.custom_fields import custom_fields_create_field_value + return await custom_fields_create_field_value.asyncio(client=self._client, json_body=value) - def update_value(self, value_id: UUID, value: CustomFieldValueUpdate) -> CustomFieldValuePublic | HTTPValidationError | None: + def update_value( + self, value_id: UUID, value: CustomFieldValueUpdate + ) -> CustomFieldValuePublic | HTTPValidationError | None: """Update a custom field value.""" from personal_crm_client.api.custom_fields import custom_fields_update_field_value + return custom_fields_update_field_value.sync(client=self._client, value_id=value_id, json_body=value) - async def update_value_async(self, value_id: UUID, value: CustomFieldValueUpdate) -> CustomFieldValuePublic | HTTPValidationError | None: + async def update_value_async( + self, value_id: UUID, value: CustomFieldValueUpdate + ) -> CustomFieldValuePublic | HTTPValidationError | None: """Async version of update_value().""" from personal_crm_client.api.custom_fields import custom_fields_update_field_value + return await custom_fields_update_field_value.asyncio(client=self._client, value_id=value_id, json_body=value) def delete_value(self, value_id: UUID) -> CustomFieldValuePublic | HTTPValidationError | None: """Delete a custom field value.""" from personal_crm_client.api.custom_fields import custom_fields_delete_field_value + return custom_fields_delete_field_value.sync(client=self._client, value_id=value_id) async def delete_value_async(self, value_id: UUID) -> CustomFieldValuePublic | HTTPValidationError | None: """Async version of delete_value().""" from personal_crm_client.api.custom_fields import custom_fields_delete_field_value + return await custom_fields_delete_field_value.asyncio(client=self._client, value_id=value_id) diff --git a/kindred-sdk/kindred_sdk/resources/debts.py b/kindred-sdk/kindred_sdk/resources/debts.py index 6c16efa7..574d22fb 100644 --- a/kindred-sdk/kindred_sdk/resources/debts.py +++ b/kindred-sdk/kindred_sdk/resources/debts.py @@ -1,16 +1,15 @@ """Debts resource for Kindred SDK.""" +from uuid import UUID + from personal_crm_client import AuthenticatedClient, Client from personal_crm_client.models import ( DebtCreate, - DebtUpdate, DebtPublic, DebtsPublic, + DebtUpdate, HTTPValidationError, ) -from uuid import UUID - -from typing import Optional class DebtsResource: @@ -24,7 +23,7 @@ def list( *, skip: int = 0, limit: int = 100, - contact_id: Optional[UUID] = None, + contact_id: UUID | None = None, ) -> DebtsPublic | HTTPValidationError | None: """List debts.""" from personal_crm_client.api.debts.debts_list_debts import sync @@ -41,7 +40,7 @@ async def list_async( *, skip: int = 0, limit: int = 100, - contact_id: Optional[UUID] = None, + contact_id: UUID | None = None, ) -> DebtsPublic | HTTPValidationError | None: """Async version of list().""" from personal_crm_client.api.debts.debts_list_debts import asyncio @@ -55,10 +54,9 @@ async def list_async( def get(self, debt_id: UUID) -> DebtPublic | HTTPValidationError | None: """Get a single debt by ID.""" - from personal_crm_client.api.debts.debts_list_debts import sync debts = self.list() - if debts and hasattr(debts, 'data'): + if debts and hasattr(debts, "data"): for debt in debts.data: if debt.id == debt_id: return debt @@ -76,17 +74,13 @@ async def create_async(self, item: DebtCreate) -> DebtPublic | HTTPValidationErr return await asyncio(client=self._client, body=item) - def update( - self, debt_id: UUID, item: DebtUpdate - ) -> DebtPublic | HTTPValidationError | None: + def update(self, debt_id: UUID, item: DebtUpdate) -> DebtPublic | HTTPValidationError | None: """Update an existing debt.""" from personal_crm_client.api.debts.debts_update_debt import sync return sync(client=self._client, debt_id=debt_id, body=item) - async def update_async( - self, debt_id: UUID, item: DebtUpdate - ) -> DebtPublic | HTTPValidationError | None: + async def update_async(self, debt_id: UUID, item: DebtUpdate) -> DebtPublic | HTTPValidationError | None: """Async version of update().""" from personal_crm_client.api.debts.debts_update_debt import asyncio @@ -98,9 +92,7 @@ def delete(self, debt_id: UUID) -> DebtPublic | HTTPValidationError | None: return sync(client=self._client, debt_id=debt_id) - async def delete_async( - self, debt_id: UUID - ) -> DebtPublic | HTTPValidationError | None: + async def delete_async(self, debt_id: UUID) -> DebtPublic | HTTPValidationError | None: """Async version of delete().""" from personal_crm_client.api.debts.debts_delete_debt import asyncio diff --git a/kindred-sdk/kindred_sdk/resources/gifts.py b/kindred-sdk/kindred_sdk/resources/gifts.py index 278ce578..bd120e88 100644 --- a/kindred-sdk/kindred_sdk/resources/gifts.py +++ b/kindred-sdk/kindred_sdk/resources/gifts.py @@ -1,16 +1,15 @@ """Gifts resource for Kindred SDK.""" +from uuid import UUID + from personal_crm_client import AuthenticatedClient, Client from personal_crm_client.models import ( GiftCreate, - GiftUpdate, GiftPublic, GiftsPublic, + GiftUpdate, HTTPValidationError, ) -from uuid import UUID - -from typing import Optional class GiftsResource: @@ -24,7 +23,7 @@ def list( *, skip: int = 0, limit: int = 100, - contact_id: Optional[UUID] = None, + contact_id: UUID | None = None, ) -> GiftsPublic | HTTPValidationError | None: """List gifts.""" from personal_crm_client.api.gifts.gifts_list_gifts import sync @@ -41,7 +40,7 @@ async def list_async( *, skip: int = 0, limit: int = 100, - contact_id: Optional[UUID] = None, + contact_id: UUID | None = None, ) -> GiftsPublic | HTTPValidationError | None: """Async version of list().""" from personal_crm_client.api.gifts.gifts_list_gifts import asyncio @@ -55,10 +54,9 @@ async def list_async( def get(self, gift_id: UUID) -> GiftPublic | HTTPValidationError | None: """Get a single gift by ID.""" - from personal_crm_client.api.gifts.gifts_list_gifts import sync gifts = self.list() - if gifts and hasattr(gifts, 'data'): + if gifts and hasattr(gifts, "data"): for gift in gifts.data: if gift.id == gift_id: return gift @@ -76,17 +74,13 @@ async def create_async(self, item: GiftCreate) -> GiftPublic | HTTPValidationErr return await asyncio(client=self._client, body=item) - def update( - self, gift_id: UUID, item: GiftUpdate - ) -> GiftPublic | HTTPValidationError | None: + def update(self, gift_id: UUID, item: GiftUpdate) -> GiftPublic | HTTPValidationError | None: """Update an existing gift.""" from personal_crm_client.api.gifts.gifts_update_gift import sync return sync(client=self._client, gift_id=gift_id, body=item) - async def update_async( - self, gift_id: UUID, item: GiftUpdate - ) -> GiftPublic | HTTPValidationError | None: + async def update_async(self, gift_id: UUID, item: GiftUpdate) -> GiftPublic | HTTPValidationError | None: """Async version of update().""" from personal_crm_client.api.gifts.gifts_update_gift import asyncio @@ -98,9 +92,7 @@ def delete(self, gift_id: UUID) -> GiftPublic | HTTPValidationError | None: return sync(client=self._client, gift_id=gift_id) - async def delete_async( - self, gift_id: UUID - ) -> GiftPublic | HTTPValidationError | None: + async def delete_async(self, gift_id: UUID) -> GiftPublic | HTTPValidationError | None: """Async version of delete().""" from personal_crm_client.api.gifts.gifts_delete_gift import asyncio diff --git a/kindred-sdk/kindred_sdk/resources/groups.py b/kindred-sdk/kindred_sdk/resources/groups.py index 687dafad..88d2be5c 100644 --- a/kindred-sdk/kindred_sdk/resources/groups.py +++ b/kindred-sdk/kindred_sdk/resources/groups.py @@ -1,63 +1,103 @@ -"""{resource_name} resource for Kindred SDK.""" +"""Groups resource for Kindred SDK.""" -from personal_crm_client import AuthenticatedClient, Client -from personal_crm_client.models import {model}Create, {model}Update, {models}, {model}Public -from personal_crm_client.models import HTTPValidationError from uuid import UUID +from personal_crm_client import AuthenticatedClient, Client +from personal_crm_client.models import ( + GroupCreate, + GroupPublic, + GroupsPublic, + GroupUpdate, + HTTPValidationError, +) + -class {class_name}: - """Resource for managing {module}.""" +class GroupsResource: + """Resource for managing groups.""" - def __init__(self, client: AuthenticatedClient | Client): + def __init__(self, client: AuthenticatedClient | Client) -> None: self._client = client - def list(self, *, skip: int = 0, limit: int = 100) -> {models} | HTTPValidationError | None: - """List {module}.""" - from personal_crm_client.api.{module} import {list_func} - return {list_func}.sync(client=self._client, skip=skip, limit=limit) + def list( + self, + *, + skip: int = 0, + limit: int = 100, + ) -> GroupsPublic | HTTPValidationError | None: + """List groups.""" + from personal_crm_client.api.groups.groups_list_groups import sync - async def list_async(self, *, skip: int = 0, limit: int = 100) -> {models} | HTTPValidationError | None: + return sync( + client=self._client, + skip=skip, + limit=limit, + ) + + async def list_async( + self, + *, + skip: int = 0, + limit: int = 100, + ) -> GroupsPublic | HTTPValidationError | None: """Async version of list().""" - from personal_crm_client.api.{module} import {list_func} - return await {list_func}.asyncio(client=self._client, skip=skip, limit=limit) + from personal_crm_client.api.groups.groups_list_groups import asyncio + + return await asyncio( + client=self._client, + skip=skip, + limit=limit, + ) - def get(self, {item_id}: UUID) -> {model}Public | HTTPValidationError | None: - """Get a single {singular} by ID.""" - from personal_crm_client.api.{module} import {get_func} - return {get_func}.sync(client=self._client, {item_id}={item_id}) + def get(self, group_id: UUID) -> GroupPublic | HTTPValidationError | None: + """Get a single group by ID.""" + groups = self.list() + if groups and hasattr(groups, "data"): + for group in groups.data: + if group.id == group_id: + return group + return None - async def get_async(self, {item_id}: UUID) -> {model}Public | HTTPValidationError | None: + async def get_async(self, group_id: UUID) -> GroupPublic | HTTPValidationError | None: """Async version of get().""" - from personal_crm_client.api.{module} import {get_func} - return await {get_func}.asyncio(client=self._client, {item_id}={item_id}) + groups = await self.list_async() + if groups and hasattr(groups, "data"): + for group in groups.data: + if group.id == group_id: + return group + return None + + def create(self, item: GroupCreate) -> GroupPublic | HTTPValidationError | None: + """Create a new group.""" + from personal_crm_client.api.groups.groups_create_group_route import sync - def create(self, item: {model}Create) -> {model}Public | HTTPValidationError | None: - """Create a new {singular}.""" - from personal_crm_client.api.{module} import {create_func} - return {create_func}.sync(client=self._client, json_body=item) + return sync(client=self._client, body=item) - async def create_async(self, item: {model}Create) -> {model}Public | HTTPValidationError | None: + async def create_async(self, item: GroupCreate) -> GroupPublic | HTTPValidationError | None: """Async version of create().""" - from personal_crm_client.api.{module} import {create_func} - return await {create_func}.asyncio(client=self._client, json_body=item) + from personal_crm_client.api.groups.groups_create_group_route import asyncio - def update(self, {item_id}: UUID, item: {model}Update) -> {model}Public | HTTPValidationError | None: - """Update an existing {singular}.""" - from personal_crm_client.api.{module} import {update_func} - return {update_func}.sync(client=self._client, {item_id}={item_id}, json_body=item) + return await asyncio(client=self._client, body=item) - async def update_async(self, {item_id}: UUID, item: {model}Update) -> {model}Public | HTTPValidationError | None: + def update(self, group_id: UUID, item: GroupUpdate) -> GroupPublic | HTTPValidationError | None: + """Update an existing group.""" + from personal_crm_client.api.groups.groups_update_group import sync + + return sync(client=self._client, group_id=group_id, body=item) + + async def update_async(self, group_id: UUID, item: GroupUpdate) -> GroupPublic | HTTPValidationError | None: """Async version of update().""" - from personal_crm_client.api.{module} import {update_func} - return await {update_func}.asyncio(client=self._client, {item_id}={item_id}, json_body=item) + from personal_crm_client.api.groups.groups_update_group import asyncio + + return await asyncio(client=self._client, group_id=group_id, body=item) - def delete(self, {item_id}: UUID) -> {model}Public | HTTPValidationError | None: - """Delete a {singular}.""" - from personal_crm_client.api.{module} import {delete_func} - return {delete_func}.sync(client=self._client, {item_id}={item_id}) + def delete(self, group_id: UUID) -> GroupPublic | HTTPValidationError | None: + """Delete a group.""" + from personal_crm_client.api.groups.groups_delete_group import sync - async def delete_async(self, {item_id}: UUID) -> {model}Public | HTTPValidationError | None: + return sync(client=self._client, group_id=group_id) + + async def delete_async(self, group_id: UUID) -> GroupPublic | HTTPValidationError | None: """Async version of delete().""" - from personal_crm_client.api.{module} import {delete_func} - return await {delete_func}.asyncio(client=self._client, {item_id}={item_id}) + from personal_crm_client.api.groups.groups_delete_group import asyncio + + return await asyncio(client=self._client, group_id=group_id) diff --git a/kindred-sdk/kindred_sdk/resources/interactions.py b/kindred-sdk/kindred_sdk/resources/interactions.py index bf956646..d425fe10 100644 --- a/kindred-sdk/kindred_sdk/resources/interactions.py +++ b/kindred-sdk/kindred_sdk/resources/interactions.py @@ -1,16 +1,15 @@ """Interactions resource for Kindred SDK.""" +from uuid import UUID + from personal_crm_client import AuthenticatedClient, Client from personal_crm_client.models import ( + HTTPValidationError, InteractionCreate, - InteractionUpdate, InteractionPublic, InteractionsPublic, - HTTPValidationError, + InteractionUpdate, ) -from uuid import UUID - -from typing import Optional class InteractionsResource: @@ -24,8 +23,8 @@ def list( *, skip: int = 0, limit: int = 100, - contact_id: Optional[UUID] = None, - search: Optional[str] = None, + contact_id: UUID | None = None, + search: str | None = None, ) -> InteractionsPublic | HTTPValidationError | None: """List interactions.""" from personal_crm_client.api.interactions.interactions_list_interactions import sync @@ -43,8 +42,8 @@ async def list_async( *, skip: int = 0, limit: int = 100, - contact_id: Optional[UUID] = None, - search: Optional[str] = None, + contact_id: UUID | None = None, + search: str | None = None, ) -> InteractionsPublic | HTTPValidationError | None: """Async version of list().""" from personal_crm_client.api.interactions.interactions_list_interactions import asyncio @@ -63,33 +62,25 @@ def get(self, interaction_id: UUID) -> InteractionPublic | HTTPValidationError | return sync(client=self._client, interaction_id=interaction_id) - async def get_async( - self, interaction_id: UUID - ) -> InteractionPublic | HTTPValidationError | None: + async def get_async(self, interaction_id: UUID) -> InteractionPublic | HTTPValidationError | None: """Async version of get().""" from personal_crm_client.api.interactions.interactions_get_interaction import asyncio return await asyncio(client=self._client, interaction_id=interaction_id) - def create( - self, item: InteractionCreate - ) -> InteractionPublic | HTTPValidationError | None: + def create(self, item: InteractionCreate) -> InteractionPublic | HTTPValidationError | None: """Create a new interaction.""" from personal_crm_client.api.interactions.interactions_create_interaction import sync return sync(client=self._client, body=item) - async def create_async( - self, item: InteractionCreate - ) -> InteractionPublic | HTTPValidationError | None: + async def create_async(self, item: InteractionCreate) -> InteractionPublic | HTTPValidationError | None: """Async version of create().""" from personal_crm_client.api.interactions.interactions_create_interaction import asyncio return await asyncio(client=self._client, body=item) - def update( - self, interaction_id: UUID, item: InteractionUpdate - ) -> InteractionPublic | HTTPValidationError | None: + def update(self, interaction_id: UUID, item: InteractionUpdate) -> InteractionPublic | HTTPValidationError | None: """Update an existing interaction.""" from personal_crm_client.api.interactions.interactions_update_interaction import sync @@ -109,9 +100,7 @@ def delete(self, interaction_id: UUID) -> InteractionPublic | HTTPValidationErro return sync(client=self._client, interaction_id=interaction_id) - async def delete_async( - self, interaction_id: UUID - ) -> InteractionPublic | HTTPValidationError | None: + async def delete_async(self, interaction_id: UUID) -> InteractionPublic | HTTPValidationError | None: """Async version of delete().""" from personal_crm_client.api.interactions.interactions_delete_interaction import asyncio diff --git a/kindred-sdk/kindred_sdk/resources/journal.py b/kindred-sdk/kindred_sdk/resources/journal.py index 53d77d29..5c4ef4be 100644 --- a/kindred-sdk/kindred_sdk/resources/journal.py +++ b/kindred-sdk/kindred_sdk/resources/journal.py @@ -1,16 +1,15 @@ """Journal resource for Kindred SDK.""" +from uuid import UUID + from personal_crm_client import AuthenticatedClient, Client from personal_crm_client.models import ( + HTTPValidationError, + JournalEntriesPublic, JournalEntryCreate, - JournalEntryUpdate, JournalEntryPublic, - JournalEntriesPublic, - HTTPValidationError, + JournalEntryUpdate, ) -from uuid import UUID - -from typing import Optional class JournalResource: @@ -51,10 +50,9 @@ async def list_async( def get(self, entry_id: UUID) -> JournalEntryPublic | HTTPValidationError | None: """Get a single journal entry by ID.""" - from personal_crm_client.api.journal.journal_list_journal_entries import sync entries = self.list() - if entries and hasattr(entries, 'data'): + if entries and hasattr(entries, "data"): for entry in entries.data: if entry.id == entry_id: return entry @@ -72,9 +70,7 @@ async def create_async(self, item: JournalEntryCreate) -> JournalEntryPublic | H return await asyncio(client=self._client, body=item) - def update( - self, entry_id: UUID, item: JournalEntryUpdate - ) -> JournalEntryPublic | HTTPValidationError | None: + def update(self, entry_id: UUID, item: JournalEntryUpdate) -> JournalEntryPublic | HTTPValidationError | None: """Update an existing journal entry.""" from personal_crm_client.api.journal.journal_update_journal_entry import sync @@ -94,9 +90,7 @@ def delete(self, entry_id: UUID) -> JournalEntryPublic | HTTPValidationError | N return sync(client=self._client, entry_id=entry_id) - async def delete_async( - self, entry_id: UUID - ) -> JournalEntryPublic | HTTPValidationError | None: + async def delete_async(self, entry_id: UUID) -> JournalEntryPublic | HTTPValidationError | None: """Async version of delete().""" from personal_crm_client.api.journal.journal_delete_journal_entry import asyncio diff --git a/kindred-sdk/kindred_sdk/resources/life_events.py b/kindred-sdk/kindred_sdk/resources/life_events.py index 1f1c3bd8..fd699438 100644 --- a/kindred-sdk/kindred_sdk/resources/life_events.py +++ b/kindred-sdk/kindred_sdk/resources/life_events.py @@ -1,16 +1,15 @@ """Life events resource for Kindred SDK.""" +from uuid import UUID + from personal_crm_client import AuthenticatedClient, Client from personal_crm_client.models import ( + HTTPValidationError, LifeEventCreate, - LifeEventUpdate, LifeEventPublic, LifeEventsPublic, - HTTPValidationError, + LifeEventUpdate, ) -from uuid import UUID - -from typing import Optional class LifeEventsResource: @@ -24,7 +23,7 @@ def list( *, skip: int = 0, limit: int = 100, - contact_id: Optional[UUID] = None, + contact_id: UUID | None = None, ) -> LifeEventsPublic | HTTPValidationError | None: """List life events.""" from personal_crm_client.api.life_events.life_events_list_life_events import sync @@ -41,7 +40,7 @@ async def list_async( *, skip: int = 0, limit: int = 100, - contact_id: Optional[UUID] = None, + contact_id: UUID | None = None, ) -> LifeEventsPublic | HTTPValidationError | None: """Async version of list().""" from personal_crm_client.api.life_events.life_events_list_life_events import asyncio @@ -55,10 +54,9 @@ async def list_async( def get(self, life_event_id: UUID) -> LifeEventPublic | HTTPValidationError | None: """Get a single life event by ID.""" - from personal_crm_client.api.life_events.life_events_list_life_events import sync events = self.list() - if events and hasattr(events, 'data'): + if events and hasattr(events, "data"): for event in events.data: if event.id == life_event_id: return event @@ -76,9 +74,7 @@ async def create_async(self, item: LifeEventCreate) -> LifeEventPublic | HTTPVal return await asyncio(client=self._client, body=item) - def update( - self, life_event_id: UUID, item: LifeEventUpdate - ) -> LifeEventPublic | HTTPValidationError | None: + def update(self, life_event_id: UUID, item: LifeEventUpdate) -> LifeEventPublic | HTTPValidationError | None: """Update an existing life event.""" from personal_crm_client.api.life_events.life_events_update_life_event import sync @@ -98,9 +94,7 @@ def delete(self, life_event_id: UUID) -> LifeEventPublic | HTTPValidationError | return sync(client=self._client, life_event_id=life_event_id) - async def delete_async( - self, life_event_id: UUID - ) -> LifeEventPublic | HTTPValidationError | None: + async def delete_async(self, life_event_id: UUID) -> LifeEventPublic | HTTPValidationError | None: """Async version of delete().""" from personal_crm_client.api.life_events.life_events_delete_life_event import asyncio diff --git a/kindred-sdk/kindred_sdk/resources/notes.py b/kindred-sdk/kindred_sdk/resources/notes.py index 687dafad..cc5fd0db 100644 --- a/kindred-sdk/kindred_sdk/resources/notes.py +++ b/kindred-sdk/kindred_sdk/resources/notes.py @@ -1,63 +1,107 @@ -"""{resource_name} resource for Kindred SDK.""" +"""Notes resource for Kindred SDK.""" -from personal_crm_client import AuthenticatedClient, Client -from personal_crm_client.models import {model}Create, {model}Update, {models}, {model}Public -from personal_crm_client.models import HTTPValidationError from uuid import UUID +from personal_crm_client import AuthenticatedClient, Client +from personal_crm_client.models import ( + HTTPValidationError, + NoteCreate, + NotePublic, + NotesPublic, + NoteUpdate, +) + -class {class_name}: - """Resource for managing {module}.""" +class NotesResource: + """Resource for managing notes.""" - def __init__(self, client: AuthenticatedClient | Client): + def __init__(self, client: AuthenticatedClient | Client) -> None: self._client = client - def list(self, *, skip: int = 0, limit: int = 100) -> {models} | HTTPValidationError | None: - """List {module}.""" - from personal_crm_client.api.{module} import {list_func} - return {list_func}.sync(client=self._client, skip=skip, limit=limit) + def list( + self, + *, + skip: int = 0, + limit: int = 100, + contact_id: UUID | None = None, + ) -> NotesPublic | HTTPValidationError | None: + """List notes.""" + from personal_crm_client.api.notes.notes_list_notes import sync - async def list_async(self, *, skip: int = 0, limit: int = 100) -> {models} | HTTPValidationError | None: + return sync( + client=self._client, + skip=skip, + limit=limit, + contact_id=contact_id, + ) + + async def list_async( + self, + *, + skip: int = 0, + limit: int = 100, + contact_id: UUID | None = None, + ) -> NotesPublic | HTTPValidationError | None: """Async version of list().""" - from personal_crm_client.api.{module} import {list_func} - return await {list_func}.asyncio(client=self._client, skip=skip, limit=limit) + from personal_crm_client.api.notes.notes_list_notes import asyncio + + return await asyncio( + client=self._client, + skip=skip, + limit=limit, + contact_id=contact_id, + ) - def get(self, {item_id}: UUID) -> {model}Public | HTTPValidationError | None: - """Get a single {singular} by ID.""" - from personal_crm_client.api.{module} import {get_func} - return {get_func}.sync(client=self._client, {item_id}={item_id}) + def get(self, note_id: UUID) -> NotePublic | HTTPValidationError | None: + """Get a single note by ID.""" + notes = self.list() + if notes and hasattr(notes, "data"): + for note in notes.data: + if note.id == note_id: + return note + return None - async def get_async(self, {item_id}: UUID) -> {model}Public | HTTPValidationError | None: + async def get_async(self, note_id: UUID) -> NotePublic | HTTPValidationError | None: """Async version of get().""" - from personal_crm_client.api.{module} import {get_func} - return await {get_func}.asyncio(client=self._client, {item_id}={item_id}) + notes = await self.list_async() + if notes and hasattr(notes, "data"): + for note in notes.data: + if note.id == note_id: + return note + return None + + def create(self, item: NoteCreate) -> NotePublic | HTTPValidationError | None: + """Create a new note.""" + from personal_crm_client.api.notes.notes_create_note_route import sync - def create(self, item: {model}Create) -> {model}Public | HTTPValidationError | None: - """Create a new {singular}.""" - from personal_crm_client.api.{module} import {create_func} - return {create_func}.sync(client=self._client, json_body=item) + return sync(client=self._client, body=item) - async def create_async(self, item: {model}Create) -> {model}Public | HTTPValidationError | None: + async def create_async(self, item: NoteCreate) -> NotePublic | HTTPValidationError | None: """Async version of create().""" - from personal_crm_client.api.{module} import {create_func} - return await {create_func}.asyncio(client=self._client, json_body=item) + from personal_crm_client.api.notes.notes_create_note_route import asyncio - def update(self, {item_id}: UUID, item: {model}Update) -> {model}Public | HTTPValidationError | None: - """Update an existing {singular}.""" - from personal_crm_client.api.{module} import {update_func} - return {update_func}.sync(client=self._client, {item_id}={item_id}, json_body=item) + return await asyncio(client=self._client, body=item) - async def update_async(self, {item_id}: UUID, item: {model}Update) -> {model}Public | HTTPValidationError | None: + def update(self, note_id: UUID, item: NoteUpdate) -> NotePublic | HTTPValidationError | None: + """Update an existing note.""" + from personal_crm_client.api.notes.notes_update_note_route import sync + + return sync(client=self._client, note_id=note_id, body=item) + + async def update_async(self, note_id: UUID, item: NoteUpdate) -> NotePublic | HTTPValidationError | None: """Async version of update().""" - from personal_crm_client.api.{module} import {update_func} - return await {update_func}.asyncio(client=self._client, {item_id}={item_id}, json_body=item) + from personal_crm_client.api.notes.notes_update_note_route import asyncio + + return await asyncio(client=self._client, note_id=note_id, body=item) - def delete(self, {item_id}: UUID) -> {model}Public | HTTPValidationError | None: - """Delete a {singular}.""" - from personal_crm_client.api.{module} import {delete_func} - return {delete_func}.sync(client=self._client, {item_id}={item_id}) + def delete(self, note_id: UUID) -> NotePublic | HTTPValidationError | None: + """Delete a note.""" + from personal_crm_client.api.notes.notes_delete_note import sync - async def delete_async(self, {item_id}: UUID) -> {model}Public | HTTPValidationError | None: + return sync(client=self._client, note_id=note_id) + + async def delete_async(self, note_id: UUID) -> NotePublic | HTTPValidationError | None: """Async version of delete().""" - from personal_crm_client.api.{module} import {delete_func} - return await {delete_func}.asyncio(client=self._client, {item_id}={item_id}) + from personal_crm_client.api.notes.notes_delete_note import asyncio + + return await asyncio(client=self._client, note_id=note_id) diff --git a/kindred-sdk/kindred_sdk/resources/pets.py b/kindred-sdk/kindred_sdk/resources/pets.py index 687dafad..7554553a 100644 --- a/kindred-sdk/kindred_sdk/resources/pets.py +++ b/kindred-sdk/kindred_sdk/resources/pets.py @@ -1,63 +1,107 @@ -"""{resource_name} resource for Kindred SDK.""" +"""Pets resource for Kindred SDK.""" -from personal_crm_client import AuthenticatedClient, Client -from personal_crm_client.models import {model}Create, {model}Update, {models}, {model}Public -from personal_crm_client.models import HTTPValidationError from uuid import UUID +from personal_crm_client import AuthenticatedClient, Client +from personal_crm_client.models import ( + HTTPValidationError, + PetCreate, + PetPublic, + PetsPublic, + PetUpdate, +) + -class {class_name}: - """Resource for managing {module}.""" +class PetsResource: + """Resource for managing pets.""" - def __init__(self, client: AuthenticatedClient | Client): + def __init__(self, client: AuthenticatedClient | Client) -> None: self._client = client - def list(self, *, skip: int = 0, limit: int = 100) -> {models} | HTTPValidationError | None: - """List {module}.""" - from personal_crm_client.api.{module} import {list_func} - return {list_func}.sync(client=self._client, skip=skip, limit=limit) + def list( + self, + *, + skip: int = 0, + limit: int = 100, + contact_id: UUID | None = None, + ) -> PetsPublic | HTTPValidationError | None: + """List pets.""" + from personal_crm_client.api.pets.pets_list_pets import sync - async def list_async(self, *, skip: int = 0, limit: int = 100) -> {models} | HTTPValidationError | None: + return sync( + client=self._client, + skip=skip, + limit=limit, + contact_id=contact_id, + ) + + async def list_async( + self, + *, + skip: int = 0, + limit: int = 100, + contact_id: UUID | None = None, + ) -> PetsPublic | HTTPValidationError | None: """Async version of list().""" - from personal_crm_client.api.{module} import {list_func} - return await {list_func}.asyncio(client=self._client, skip=skip, limit=limit) + from personal_crm_client.api.pets.pets_list_pets import asyncio + + return await asyncio( + client=self._client, + skip=skip, + limit=limit, + contact_id=contact_id, + ) - def get(self, {item_id}: UUID) -> {model}Public | HTTPValidationError | None: - """Get a single {singular} by ID.""" - from personal_crm_client.api.{module} import {get_func} - return {get_func}.sync(client=self._client, {item_id}={item_id}) + def get(self, pet_id: UUID) -> PetPublic | HTTPValidationError | None: + """Get a single pet by ID.""" + pets = self.list() + if pets and hasattr(pets, "data"): + for pet in pets.data: + if pet.id == pet_id: + return pet + return None - async def get_async(self, {item_id}: UUID) -> {model}Public | HTTPValidationError | None: + async def get_async(self, pet_id: UUID) -> PetPublic | HTTPValidationError | None: """Async version of get().""" - from personal_crm_client.api.{module} import {get_func} - return await {get_func}.asyncio(client=self._client, {item_id}={item_id}) + pets = await self.list_async() + if pets and hasattr(pets, "data"): + for pet in pets.data: + if pet.id == pet_id: + return pet + return None + + def create(self, item: PetCreate) -> PetPublic | HTTPValidationError | None: + """Create a new pet.""" + from personal_crm_client.api.pets.pets_create_pet_route import sync - def create(self, item: {model}Create) -> {model}Public | HTTPValidationError | None: - """Create a new {singular}.""" - from personal_crm_client.api.{module} import {create_func} - return {create_func}.sync(client=self._client, json_body=item) + return sync(client=self._client, body=item) - async def create_async(self, item: {model}Create) -> {model}Public | HTTPValidationError | None: + async def create_async(self, item: PetCreate) -> PetPublic | HTTPValidationError | None: """Async version of create().""" - from personal_crm_client.api.{module} import {create_func} - return await {create_func}.asyncio(client=self._client, json_body=item) + from personal_crm_client.api.pets.pets_create_pet_route import asyncio - def update(self, {item_id}: UUID, item: {model}Update) -> {model}Public | HTTPValidationError | None: - """Update an existing {singular}.""" - from personal_crm_client.api.{module} import {update_func} - return {update_func}.sync(client=self._client, {item_id}={item_id}, json_body=item) + return await asyncio(client=self._client, body=item) - async def update_async(self, {item_id}: UUID, item: {model}Update) -> {model}Public | HTTPValidationError | None: + def update(self, pet_id: UUID, item: PetUpdate) -> PetPublic | HTTPValidationError | None: + """Update an existing pet.""" + from personal_crm_client.api.pets.pets_update_pet import sync + + return sync(client=self._client, pet_id=pet_id, body=item) + + async def update_async(self, pet_id: UUID, item: PetUpdate) -> PetPublic | HTTPValidationError | None: """Async version of update().""" - from personal_crm_client.api.{module} import {update_func} - return await {update_func}.asyncio(client=self._client, {item_id}={item_id}, json_body=item) + from personal_crm_client.api.pets.pets_update_pet import asyncio + + return await asyncio(client=self._client, pet_id=pet_id, body=item) - def delete(self, {item_id}: UUID) -> {model}Public | HTTPValidationError | None: - """Delete a {singular}.""" - from personal_crm_client.api.{module} import {delete_func} - return {delete_func}.sync(client=self._client, {item_id}={item_id}) + def delete(self, pet_id: UUID) -> PetPublic | HTTPValidationError | None: + """Delete a pet.""" + from personal_crm_client.api.pets.pets_delete_pet import sync - async def delete_async(self, {item_id}: UUID) -> {model}Public | HTTPValidationError | None: + return sync(client=self._client, pet_id=pet_id) + + async def delete_async(self, pet_id: UUID) -> PetPublic | HTTPValidationError | None: """Async version of delete().""" - from personal_crm_client.api.{module} import {delete_func} - return await {delete_func}.asyncio(client=self._client, {item_id}={item_id}) + from personal_crm_client.api.pets.pets_delete_pet import asyncio + + return await asyncio(client=self._client, pet_id=pet_id) diff --git a/kindred-sdk/kindred_sdk/resources/relationships.py b/kindred-sdk/kindred_sdk/resources/relationships.py index 8e2e158d..67bf71e2 100644 --- a/kindred-sdk/kindred_sdk/resources/relationships.py +++ b/kindred-sdk/kindred_sdk/resources/relationships.py @@ -1,16 +1,15 @@ """Relationships resource for Kindred SDK.""" +from uuid import UUID + from personal_crm_client import AuthenticatedClient, Client from personal_crm_client.models import ( + HTTPValidationError, RelationshipCreate, - RelationshipUpdate, RelationshipPublic, RelationshipsPublic, - HTTPValidationError, + RelationshipUpdate, ) -from uuid import UUID - -from typing import Optional class RelationshipsResource: @@ -24,7 +23,7 @@ def list( *, skip: int = 0, limit: int = 100, - contact_id: Optional[UUID] = None, + contact_id: UUID | None = None, ) -> RelationshipsPublic | HTTPValidationError | None: """List relationships.""" from personal_crm_client.api.relationships.relationships_list_relationships import sync @@ -41,7 +40,7 @@ async def list_async( *, skip: int = 0, limit: int = 100, - contact_id: Optional[UUID] = None, + contact_id: UUID | None = None, ) -> RelationshipsPublic | HTTPValidationError | None: """Async version of list().""" from personal_crm_client.api.relationships.relationships_list_relationships import asyncio @@ -55,10 +54,9 @@ async def list_async( def get(self, relationship_id: UUID) -> RelationshipPublic | HTTPValidationError | None: """Get a single relationship by ID.""" - from personal_crm_client.api.relationships.relationships_list_relationships import sync relationships = self.list() - if relationships and hasattr(relationships, 'data'): + if relationships and hasattr(relationships, "data"): for rel in relationships.data: if rel.id == relationship_id: return rel @@ -98,25 +96,19 @@ def delete(self, relationship_id: UUID) -> RelationshipPublic | HTTPValidationEr return sync(client=self._client, relationship_id=relationship_id) - async def delete_async( - self, relationship_id: UUID - ) -> RelationshipPublic | HTTPValidationError | None: + async def delete_async(self, relationship_id: UUID) -> RelationshipPublic | HTTPValidationError | None: """Async version of delete().""" from personal_crm_client.api.relationships.relationships_delete_relationship import asyncio return await asyncio(client=self._client, relationship_id=relationship_id) - def lookup_inverse( - self, relationship_type: str - ) -> object | HTTPValidationError | None: + def lookup_inverse(self, relationship_type: str) -> object | HTTPValidationError | None: """Look up the inverse of a relationship type.""" from personal_crm_client.api.relationships.relationships_lookup_inverse import sync return sync(client=self._client, relationship_type=relationship_type) - async def lookup_inverse_async( - self, relationship_type: str - ) -> object | HTTPValidationError | None: + async def lookup_inverse_async(self, relationship_type: str) -> object | HTTPValidationError | None: """Async version of lookup_inverse().""" from personal_crm_client.api.relationships.relationships_lookup_inverse import asyncio diff --git a/kindred-sdk/kindred_sdk/resources/reminders.py b/kindred-sdk/kindred_sdk/resources/reminders.py index 687dafad..7754c3e6 100644 --- a/kindred-sdk/kindred_sdk/resources/reminders.py +++ b/kindred-sdk/kindred_sdk/resources/reminders.py @@ -1,63 +1,131 @@ -"""{resource_name} resource for Kindred SDK.""" +"""Reminders resource for Kindred SDK.""" -from personal_crm_client import AuthenticatedClient, Client -from personal_crm_client.models import {model}Create, {model}Update, {models}, {model}Public -from personal_crm_client.models import HTTPValidationError from uuid import UUID +from personal_crm_client import AuthenticatedClient, Client +from personal_crm_client.models import ( + HTTPValidationError, + ReminderCreate, + ReminderPublic, + RemindersPublic, + ReminderUpdate, +) + -class {class_name}: - """Resource for managing {module}.""" +class RemindersResource: + """Resource for managing reminders.""" - def __init__(self, client: AuthenticatedClient | Client): + def __init__(self, client: AuthenticatedClient | Client) -> None: self._client = client - def list(self, *, skip: int = 0, limit: int = 100) -> {models} | HTTPValidationError | None: - """List {module}.""" - from personal_crm_client.api.{module} import {list_func} - return {list_func}.sync(client=self._client, skip=skip, limit=limit) + def list( + self, + *, + skip: int = 0, + limit: int = 100, + contact_id: UUID | None = None, + ) -> RemindersPublic | HTTPValidationError | None: + """List reminders.""" + from personal_crm_client.api.reminders.reminders_list_reminders import sync + + return sync( + client=self._client, + skip=skip, + limit=limit, + contact_id=contact_id, + ) - async def list_async(self, *, skip: int = 0, limit: int = 100) -> {models} | HTTPValidationError | None: + async def list_async( + self, + *, + skip: int = 0, + limit: int = 100, + contact_id: UUID | None = None, + ) -> RemindersPublic | HTTPValidationError | None: """Async version of list().""" - from personal_crm_client.api.{module} import {list_func} - return await {list_func}.asyncio(client=self._client, skip=skip, limit=limit) + from personal_crm_client.api.reminders.reminders_list_reminders import asyncio - def get(self, {item_id}: UUID) -> {model}Public | HTTPValidationError | None: - """Get a single {singular} by ID.""" - from personal_crm_client.api.{module} import {get_func} - return {get_func}.sync(client=self._client, {item_id}={item_id}) + return await asyncio( + client=self._client, + skip=skip, + limit=limit, + contact_id=contact_id, + ) - async def get_async(self, {item_id}: UUID) -> {model}Public | HTTPValidationError | None: + def get(self, reminder_id: UUID) -> ReminderPublic | HTTPValidationError | None: + """Get a single reminder by ID.""" + reminders = self.list() + if reminders and hasattr(reminders, "data"): + for reminder in reminders.data: + if reminder.id == reminder_id: + return reminder + return None + + async def get_async(self, reminder_id: UUID) -> ReminderPublic | HTTPValidationError | None: """Async version of get().""" - from personal_crm_client.api.{module} import {get_func} - return await {get_func}.asyncio(client=self._client, {item_id}={item_id}) + reminders = await self.list_async() + if reminders and hasattr(reminders, "data"): + for reminder in reminders.data: + if reminder.id == reminder_id: + return reminder + return None + + def create(self, item: ReminderCreate) -> ReminderPublic | HTTPValidationError | None: + """Create a new reminder.""" + from personal_crm_client.api.reminders.reminders_create_reminder_route import sync - def create(self, item: {model}Create) -> {model}Public | HTTPValidationError | None: - """Create a new {singular}.""" - from personal_crm_client.api.{module} import {create_func} - return {create_func}.sync(client=self._client, json_body=item) + return sync(client=self._client, body=item) - async def create_async(self, item: {model}Create) -> {model}Public | HTTPValidationError | None: + async def create_async(self, item: ReminderCreate) -> ReminderPublic | HTTPValidationError | None: """Async version of create().""" - from personal_crm_client.api.{module} import {create_func} - return await {create_func}.asyncio(client=self._client, json_body=item) + from personal_crm_client.api.reminders.reminders_create_reminder_route import asyncio + + return await asyncio(client=self._client, body=item) + + def update(self, reminder_id: UUID, item: ReminderUpdate) -> ReminderPublic | HTTPValidationError | None: + """Update an existing reminder.""" + from personal_crm_client.api.reminders.reminders_update_reminder import sync - def update(self, {item_id}: UUID, item: {model}Update) -> {model}Public | HTTPValidationError | None: - """Update an existing {singular}.""" - from personal_crm_client.api.{module} import {update_func} - return {update_func}.sync(client=self._client, {item_id}={item_id}, json_body=item) + return sync(client=self._client, reminder_id=reminder_id, body=item) - async def update_async(self, {item_id}: UUID, item: {model}Update) -> {model}Public | HTTPValidationError | None: + async def update_async( + self, reminder_id: UUID, item: ReminderUpdate + ) -> ReminderPublic | HTTPValidationError | None: """Async version of update().""" - from personal_crm_client.api.{module} import {update_func} - return await {update_func}.asyncio(client=self._client, {item_id}={item_id}, json_body=item) + from personal_crm_client.api.reminders.reminders_update_reminder import asyncio - def delete(self, {item_id}: UUID) -> {model}Public | HTTPValidationError | None: - """Delete a {singular}.""" - from personal_crm_client.api.{module} import {delete_func} - return {delete_func}.sync(client=self._client, {item_id}={item_id}) + return await asyncio(client=self._client, reminder_id=reminder_id, body=item) - async def delete_async(self, {item_id}: UUID) -> {model}Public | HTTPValidationError | None: + def delete(self, reminder_id: UUID) -> ReminderPublic | HTTPValidationError | None: + """Delete a reminder.""" + from personal_crm_client.api.reminders.reminders_delete_reminder import sync + + return sync(client=self._client, reminder_id=reminder_id) + + async def delete_async(self, reminder_id: UUID) -> ReminderPublic | HTTPValidationError | None: """Async version of delete().""" - from personal_crm_client.api.{module} import {delete_func} - return await {delete_func}.asyncio(client=self._client, {item_id}={item_id}) + from personal_crm_client.api.reminders.reminders_delete_reminder import asyncio + + return await asyncio(client=self._client, reminder_id=reminder_id) + + def snooze(self, reminder_id: UUID, *, snooze_until: str) -> ReminderPublic | HTTPValidationError | None: + """Snooze a reminder until a specified time.""" + from personal_crm_client.api.reminders.reminders_snooze_reminder import sync + + return sync( + client=self._client, + reminder_id=reminder_id, + snooze_until=snooze_until, + ) + + async def snooze_async( + self, reminder_id: UUID, *, snooze_until: str + ) -> ReminderPublic | HTTPValidationError | None: + """Async version of snooze().""" + from personal_crm_client.api.reminders.reminders_snooze_reminder import asyncio + + return await asyncio( + client=self._client, + reminder_id=reminder_id, + snooze_until=snooze_until, + ) diff --git a/kindred-sdk/kindred_sdk/resources/tags.py b/kindred-sdk/kindred_sdk/resources/tags.py index 83ec111f..f33cd3cb 100644 --- a/kindred-sdk/kindred_sdk/resources/tags.py +++ b/kindred-sdk/kindred_sdk/resources/tags.py @@ -1,16 +1,15 @@ """Tags resource for Kindred SDK.""" +from uuid import UUID + from personal_crm_client import AuthenticatedClient, Client from personal_crm_client.models import ( + HTTPValidationError, TagCreate, - TagUpdate, TagPublic, TagsPublic, - HTTPValidationError, + TagUpdate, ) -from uuid import UUID - -from typing import Optional class TagsResource: @@ -19,17 +18,13 @@ class TagsResource: def __init__(self, client: AuthenticatedClient | Client) -> None: self._client = client - def list( - self, *, skip: int = 0, limit: int = 100 - ) -> TagsPublic | HTTPValidationError | None: + def list(self, *, skip: int = 0, limit: int = 100) -> TagsPublic | HTTPValidationError | None: """List tags.""" from personal_crm_client.api.tags.tags_list_tags import sync return sync(client=self._client, skip=skip, limit=limit) - async def list_async( - self, *, skip: int = 0, limit: int = 100 - ) -> TagsPublic | HTTPValidationError | None: + async def list_async(self, *, skip: int = 0, limit: int = 100) -> TagsPublic | HTTPValidationError | None: """Async version of list().""" from personal_crm_client.api.tags.tags_list_tags import asyncio @@ -37,11 +32,10 @@ async def list_async( def get(self, tag_id: UUID) -> TagPublic | HTTPValidationError | None: """Get a single tag by ID.""" - from personal_crm_client.api.tags.tags_list_tags import sync # Note: The generated client may not have a separate get function tags = self.list() - if tags and hasattr(tags, 'data'): + if tags and hasattr(tags, "data"): for tag in tags.data: if tag.id == tag_id: return tag @@ -59,17 +53,13 @@ async def create_async(self, item: TagCreate) -> TagPublic | HTTPValidationError return await asyncio(client=self._client, body=item) - def update( - self, tag_id: UUID, item: TagUpdate - ) -> TagPublic | HTTPValidationError | None: + def update(self, tag_id: UUID, item: TagUpdate) -> TagPublic | HTTPValidationError | None: """Update an existing tag.""" from personal_crm_client.api.tags.tags_update_tag import sync return sync(client=self._client, tag_id=tag_id, body=item) - async def update_async( - self, tag_id: UUID, item: TagUpdate - ) -> TagPublic | HTTPValidationError | None: + async def update_async(self, tag_id: UUID, item: TagUpdate) -> TagPublic | HTTPValidationError | None: """Async version of update().""" from personal_crm_client.api.tags.tags_update_tag import asyncio diff --git a/kindred-sdk/personal_crm_client/__init__.py b/kindred-sdk/personal_crm_client/__init__.py index 3102f44f..93204af5 100644 --- a/kindred-sdk/personal_crm_client/__init__.py +++ b/kindred-sdk/personal_crm_client/__init__.py @@ -1,5 +1,5 @@ +"""A client library for accessing Personal CRM""" -""" A client library for accessing Personal CRM """ from .client import AuthenticatedClient, Client __all__ = ( diff --git a/kindred-sdk/personal_crm_client/api/__init__.py b/kindred-sdk/personal_crm_client/api/__init__.py index dc035f4c..81f9fa24 100644 --- a/kindred-sdk/personal_crm_client/api/__init__.py +++ b/kindred-sdk/personal_crm_client/api/__init__.py @@ -1 +1 @@ -""" Contains methods for accessing the API """ +"""Contains methods for accessing the API""" diff --git a/kindred-sdk/personal_crm_client/api/activity_logs/__init__.py b/kindred-sdk/personal_crm_client/api/activity_logs/__init__.py index c9921b5f..2d7c0b23 100644 --- a/kindred-sdk/personal_crm_client/api/activity_logs/__init__.py +++ b/kindred-sdk/personal_crm_client/api/activity_logs/__init__.py @@ -1 +1 @@ -""" Contains endpoint functions for accessing the API """ +"""Contains endpoint functions for accessing the API""" diff --git a/kindred-sdk/personal_crm_client/api/activity_logs/activity_logs_list_activity_logs.py b/kindred-sdk/personal_crm_client/api/activity_logs/activity_logs_list_activity_logs.py index e13ce55e..d1b31075 100644 --- a/kindred-sdk/personal_crm_client/api/activity_logs/activity_logs_list_activity_logs.py +++ b/kindred-sdk/personal_crm_client/api/activity_logs/activity_logs_list_activity_logs.py @@ -1,19 +1,14 @@ from http import HTTPStatus -from typing import Any, cast -from urllib.parse import quote +from typing import Any +from uuid import UUID import httpx -from ...client import AuthenticatedClient, Client -from ...types import Response, UNSET from ... import errors - +from ...client import AuthenticatedClient, Client from ...models.activity_logs_public import ActivityLogsPublic from ...models.http_validation_error import HTTPValidationError -from ...types import UNSET, Unset -from typing import cast -from uuid import UUID - +from ...types import UNSET, Response, Unset def _get_kwargs( @@ -23,12 +18,7 @@ def _get_kwargs( tag_id: None | Unset | UUID = UNSET, limit: int | Unset = 50, offset: int | Unset = 0, - ) -> dict[str, Any]: - - - - params: dict[str, Any] = {} json_entity_type: None | str | Unset @@ -60,34 +50,28 @@ def _get_kwargs( params["offset"] = offset - params = {k: v for k, v in params.items() if v is not UNSET and v is not None} - _kwargs: dict[str, Any] = { "method": "get", "url": "/api/v1/activity-logs/", "params": params, } - return _kwargs - -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> ActivityLogsPublic | HTTPValidationError | None: +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> ActivityLogsPublic | HTTPValidationError | None: if response.status_code == 200: response_200 = ActivityLogsPublic.from_dict(response.json()) - - return response_200 if response.status_code == 422: response_422 = HTTPValidationError.from_dict(response.json()) - - return response_422 if client.raise_on_unexpected_status: @@ -96,7 +80,9 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[ActivityLogsPublic | HTTPValidationError]: +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[ActivityLogsPublic | HTTPValidationError]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -113,9 +99,8 @@ def sync_detailed( tag_id: None | Unset | UUID = UNSET, limit: int | Unset = 50, offset: int | Unset = 0, - ) -> Response[ActivityLogsPublic | HTTPValidationError]: - """ List Activity Logs + """List Activity Logs Return activity log entries for entities visible to the current user. @@ -135,16 +120,14 @@ def sync_detailed( Returns: Response[ActivityLogsPublic | HTTPValidationError] - """ - + """ kwargs = _get_kwargs( entity_type=entity_type, -entity_id=entity_id, -tag_id=tag_id, -limit=limit, -offset=offset, - + entity_id=entity_id, + tag_id=tag_id, + limit=limit, + offset=offset, ) response = client.get_httpx_client().request( @@ -153,6 +136,7 @@ def sync_detailed( return _build_response(client=client, response=response) + def sync( *, client: AuthenticatedClient, @@ -161,9 +145,8 @@ def sync( tag_id: None | Unset | UUID = UNSET, limit: int | Unset = 50, offset: int | Unset = 0, - ) -> ActivityLogsPublic | HTTPValidationError | None: - """ List Activity Logs + """List Activity Logs Return activity log entries for entities visible to the current user. @@ -183,19 +166,18 @@ def sync( Returns: ActivityLogsPublic | HTTPValidationError - """ - + """ return sync_detailed( client=client, -entity_type=entity_type, -entity_id=entity_id, -tag_id=tag_id, -limit=limit, -offset=offset, - + entity_type=entity_type, + entity_id=entity_id, + tag_id=tag_id, + limit=limit, + offset=offset, ).parsed + async def asyncio_detailed( *, client: AuthenticatedClient, @@ -204,9 +186,8 @@ async def asyncio_detailed( tag_id: None | Unset | UUID = UNSET, limit: int | Unset = 50, offset: int | Unset = 0, - ) -> Response[ActivityLogsPublic | HTTPValidationError]: - """ List Activity Logs + """List Activity Logs Return activity log entries for entities visible to the current user. @@ -226,24 +207,21 @@ async def asyncio_detailed( Returns: Response[ActivityLogsPublic | HTTPValidationError] - """ - + """ kwargs = _get_kwargs( entity_type=entity_type, -entity_id=entity_id, -tag_id=tag_id, -limit=limit, -offset=offset, - + entity_id=entity_id, + tag_id=tag_id, + limit=limit, + offset=offset, ) - response = await client.get_async_httpx_client().request( - **kwargs - ) + response = await client.get_async_httpx_client().request(**kwargs) return _build_response(client=client, response=response) + async def asyncio( *, client: AuthenticatedClient, @@ -252,9 +230,8 @@ async def asyncio( tag_id: None | Unset | UUID = UNSET, limit: int | Unset = 50, offset: int | Unset = 0, - ) -> ActivityLogsPublic | HTTPValidationError | None: - """ List Activity Logs + """List Activity Logs Return activity log entries for entities visible to the current user. @@ -274,15 +251,15 @@ async def asyncio( Returns: ActivityLogsPublic | HTTPValidationError - """ - - - return (await asyncio_detailed( - client=client, -entity_type=entity_type, -entity_id=entity_id, -tag_id=tag_id, -limit=limit, -offset=offset, - - )).parsed + """ + + return ( + await asyncio_detailed( + client=client, + entity_type=entity_type, + entity_id=entity_id, + tag_id=tag_id, + limit=limit, + offset=offset, + ) + ).parsed diff --git a/kindred-sdk/personal_crm_client/api/addresses/__init__.py b/kindred-sdk/personal_crm_client/api/addresses/__init__.py index c9921b5f..2d7c0b23 100644 --- a/kindred-sdk/personal_crm_client/api/addresses/__init__.py +++ b/kindred-sdk/personal_crm_client/api/addresses/__init__.py @@ -1 +1 @@ -""" Contains endpoint functions for accessing the API """ +"""Contains endpoint functions for accessing the API""" diff --git a/kindred-sdk/personal_crm_client/api/addresses/addresses_create_address_route.py b/kindred-sdk/personal_crm_client/api/addresses/addresses_create_address_route.py index cc911b32..e84adca8 100644 --- a/kindred-sdk/personal_crm_client/api/addresses/addresses_create_address_route.py +++ b/kindred-sdk/personal_crm_client/api/addresses/addresses_create_address_route.py @@ -1,32 +1,22 @@ from http import HTTPStatus -from typing import Any, cast -from urllib.parse import quote +from typing import Any import httpx -from ...client import AuthenticatedClient, Client -from ...types import Response, UNSET from ... import errors - +from ...client import AuthenticatedClient, Client from ...models.address_create import AddressCreate from ...models.address_public import AddressPublic from ...models.http_validation_error import HTTPValidationError -from typing import cast - +from ...types import Response def _get_kwargs( *, body: AddressCreate, - ) -> dict[str, Any]: headers: dict[str, Any] = {} - - - - - _kwargs: dict[str, Any] = { "method": "post", "url": "/api/v1/addresses/", @@ -34,27 +24,23 @@ def _get_kwargs( _kwargs["json"] = body.to_dict() - headers["Content-Type"] = "application/json" _kwargs["headers"] = headers return _kwargs - -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> AddressPublic | HTTPValidationError | None: +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> AddressPublic | HTTPValidationError | None: if response.status_code == 200: response_200 = AddressPublic.from_dict(response.json()) - - return response_200 if response.status_code == 422: response_422 = HTTPValidationError.from_dict(response.json()) - - return response_422 if client.raise_on_unexpected_status: @@ -63,7 +49,9 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[AddressPublic | HTTPValidationError]: +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[AddressPublic | HTTPValidationError]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -76,9 +64,8 @@ def sync_detailed( *, client: AuthenticatedClient, body: AddressCreate, - ) -> Response[AddressPublic | HTTPValidationError]: - """ Create Address Route + """Create Address Route Create a new address. @@ -91,12 +78,10 @@ def sync_detailed( Returns: Response[AddressPublic | HTTPValidationError] - """ - + """ kwargs = _get_kwargs( body=body, - ) response = client.get_httpx_client().request( @@ -105,13 +90,13 @@ def sync_detailed( return _build_response(client=client, response=response) + def sync( *, client: AuthenticatedClient, body: AddressCreate, - ) -> AddressPublic | HTTPValidationError | None: - """ Create Address Route + """Create Address Route Create a new address. @@ -124,22 +109,20 @@ def sync( Returns: AddressPublic | HTTPValidationError - """ - + """ return sync_detailed( client=client, -body=body, - + body=body, ).parsed + async def asyncio_detailed( *, client: AuthenticatedClient, body: AddressCreate, - ) -> Response[AddressPublic | HTTPValidationError]: - """ Create Address Route + """Create Address Route Create a new address. @@ -152,27 +135,23 @@ async def asyncio_detailed( Returns: Response[AddressPublic | HTTPValidationError] - """ - + """ kwargs = _get_kwargs( body=body, - ) - response = await client.get_async_httpx_client().request( - **kwargs - ) + response = await client.get_async_httpx_client().request(**kwargs) return _build_response(client=client, response=response) + async def asyncio( *, client: AuthenticatedClient, body: AddressCreate, - ) -> AddressPublic | HTTPValidationError | None: - """ Create Address Route + """Create Address Route Create a new address. @@ -185,11 +164,11 @@ async def asyncio( Returns: AddressPublic | HTTPValidationError - """ + """ - - return (await asyncio_detailed( - client=client, -body=body, - - )).parsed + return ( + await asyncio_detailed( + client=client, + body=body, + ) + ).parsed diff --git a/kindred-sdk/personal_crm_client/api/addresses/addresses_delete_address.py b/kindred-sdk/personal_crm_client/api/addresses/addresses_delete_address.py index ed13cae7..9fb246e1 100644 --- a/kindred-sdk/personal_crm_client/api/addresses/addresses_delete_address.py +++ b/kindred-sdk/personal_crm_client/api/addresses/addresses_delete_address.py @@ -1,40 +1,32 @@ from http import HTTPStatus -from typing import Any, cast +from typing import Any from urllib.parse import quote +from uuid import UUID import httpx -from ...client import AuthenticatedClient, Client -from ...types import Response, UNSET from ... import errors - +from ...client import AuthenticatedClient, Client from ...models.http_validation_error import HTTPValidationError -from typing import cast -from uuid import UUID - +from ...types import Response def _get_kwargs( address_id: UUID, - ) -> dict[str, Any]: - - - - - - _kwargs: dict[str, Any] = { "method": "delete", - "url": "/api/v1/addresses/{address_id}".format(address_id=quote(str(address_id), safe=""),), + "url": "/api/v1/addresses/{address_id}".format( + address_id=quote(str(address_id), safe=""), + ), } - return _kwargs - -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Any | HTTPValidationError | None: +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Any | HTTPValidationError | None: if response.status_code == 200: response_200 = response.json() return response_200 @@ -42,8 +34,6 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res if response.status_code == 422: response_422 = HTTPValidationError.from_dict(response.json()) - - return response_422 if client.raise_on_unexpected_status: @@ -52,7 +42,9 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[Any | HTTPValidationError]: +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[Any | HTTPValidationError]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -65,9 +57,8 @@ def sync_detailed( address_id: UUID, *, client: AuthenticatedClient, - ) -> Response[Any | HTTPValidationError]: - """ Delete Address + """Delete Address Delete an address. @@ -80,12 +71,10 @@ def sync_detailed( Returns: Response[Any | HTTPValidationError] - """ - + """ kwargs = _get_kwargs( address_id=address_id, - ) response = client.get_httpx_client().request( @@ -94,13 +83,13 @@ def sync_detailed( return _build_response(client=client, response=response) + def sync( address_id: UUID, *, client: AuthenticatedClient, - ) -> Any | HTTPValidationError | None: - """ Delete Address + """Delete Address Delete an address. @@ -113,22 +102,20 @@ def sync( Returns: Any | HTTPValidationError - """ - + """ return sync_detailed( address_id=address_id, -client=client, - + client=client, ).parsed + async def asyncio_detailed( address_id: UUID, *, client: AuthenticatedClient, - ) -> Response[Any | HTTPValidationError]: - """ Delete Address + """Delete Address Delete an address. @@ -141,27 +128,23 @@ async def asyncio_detailed( Returns: Response[Any | HTTPValidationError] - """ - + """ kwargs = _get_kwargs( address_id=address_id, - ) - response = await client.get_async_httpx_client().request( - **kwargs - ) + response = await client.get_async_httpx_client().request(**kwargs) return _build_response(client=client, response=response) + async def asyncio( address_id: UUID, *, client: AuthenticatedClient, - ) -> Any | HTTPValidationError | None: - """ Delete Address + """Delete Address Delete an address. @@ -174,11 +157,11 @@ async def asyncio( Returns: Any | HTTPValidationError - """ + """ - - return (await asyncio_detailed( - address_id=address_id, -client=client, - - )).parsed + return ( + await asyncio_detailed( + address_id=address_id, + client=client, + ) + ).parsed diff --git a/kindred-sdk/personal_crm_client/api/addresses/addresses_list_addresses.py b/kindred-sdk/personal_crm_client/api/addresses/addresses_list_addresses.py index d7535e35..ae08b38e 100644 --- a/kindred-sdk/personal_crm_client/api/addresses/addresses_list_addresses.py +++ b/kindred-sdk/personal_crm_client/api/addresses/addresses_list_addresses.py @@ -1,40 +1,32 @@ from http import HTTPStatus -from typing import Any, cast +from typing import Any from urllib.parse import quote +from uuid import UUID import httpx -from ...client import AuthenticatedClient, Client -from ...types import Response, UNSET from ... import errors - +from ...client import AuthenticatedClient, Client from ...models.http_validation_error import HTTPValidationError -from typing import cast -from uuid import UUID - +from ...types import Response def _get_kwargs( contact_id: UUID, - ) -> dict[str, Any]: - - - - - - _kwargs: dict[str, Any] = { "method": "get", - "url": "/api/v1/addresses/contact/{contact_id}".format(contact_id=quote(str(contact_id), safe=""),), + "url": "/api/v1/addresses/contact/{contact_id}".format( + contact_id=quote(str(contact_id), safe=""), + ), } - return _kwargs - -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Any | HTTPValidationError | None: +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Any | HTTPValidationError | None: if response.status_code == 200: response_200 = response.json() return response_200 @@ -42,8 +34,6 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res if response.status_code == 422: response_422 = HTTPValidationError.from_dict(response.json()) - - return response_422 if client.raise_on_unexpected_status: @@ -52,7 +42,9 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[Any | HTTPValidationError]: +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[Any | HTTPValidationError]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -65,9 +57,8 @@ def sync_detailed( contact_id: UUID, *, client: AuthenticatedClient, - ) -> Response[Any | HTTPValidationError]: - """ List Addresses + """List Addresses List all addresses for a contact. @@ -80,12 +71,10 @@ def sync_detailed( Returns: Response[Any | HTTPValidationError] - """ - + """ kwargs = _get_kwargs( contact_id=contact_id, - ) response = client.get_httpx_client().request( @@ -94,13 +83,13 @@ def sync_detailed( return _build_response(client=client, response=response) + def sync( contact_id: UUID, *, client: AuthenticatedClient, - ) -> Any | HTTPValidationError | None: - """ List Addresses + """List Addresses List all addresses for a contact. @@ -113,22 +102,20 @@ def sync( Returns: Any | HTTPValidationError - """ - + """ return sync_detailed( contact_id=contact_id, -client=client, - + client=client, ).parsed + async def asyncio_detailed( contact_id: UUID, *, client: AuthenticatedClient, - ) -> Response[Any | HTTPValidationError]: - """ List Addresses + """List Addresses List all addresses for a contact. @@ -141,27 +128,23 @@ async def asyncio_detailed( Returns: Response[Any | HTTPValidationError] - """ - + """ kwargs = _get_kwargs( contact_id=contact_id, - ) - response = await client.get_async_httpx_client().request( - **kwargs - ) + response = await client.get_async_httpx_client().request(**kwargs) return _build_response(client=client, response=response) + async def asyncio( contact_id: UUID, *, client: AuthenticatedClient, - ) -> Any | HTTPValidationError | None: - """ List Addresses + """List Addresses List all addresses for a contact. @@ -174,11 +157,11 @@ async def asyncio( Returns: Any | HTTPValidationError - """ + """ - - return (await asyncio_detailed( - contact_id=contact_id, -client=client, - - )).parsed + return ( + await asyncio_detailed( + contact_id=contact_id, + client=client, + ) + ).parsed diff --git a/kindred-sdk/personal_crm_client/api/addresses/addresses_update_address.py b/kindred-sdk/personal_crm_client/api/addresses/addresses_update_address.py index 4bf69a45..d1af9cda 100644 --- a/kindred-sdk/personal_crm_client/api/addresses/addresses_update_address.py +++ b/kindred-sdk/personal_crm_client/api/addresses/addresses_update_address.py @@ -1,62 +1,51 @@ from http import HTTPStatus -from typing import Any, cast +from typing import Any from urllib.parse import quote +from uuid import UUID import httpx -from ...client import AuthenticatedClient, Client -from ...types import Response, UNSET from ... import errors - +from ...client import AuthenticatedClient, Client from ...models.address_public import AddressPublic from ...models.address_update import AddressUpdate from ...models.http_validation_error import HTTPValidationError -from typing import cast -from uuid import UUID - +from ...types import Response def _get_kwargs( address_id: UUID, *, body: AddressUpdate, - ) -> dict[str, Any]: headers: dict[str, Any] = {} - - - - - _kwargs: dict[str, Any] = { "method": "patch", - "url": "/api/v1/addresses/{address_id}".format(address_id=quote(str(address_id), safe=""),), + "url": "/api/v1/addresses/{address_id}".format( + address_id=quote(str(address_id), safe=""), + ), } _kwargs["json"] = body.to_dict() - headers["Content-Type"] = "application/json" _kwargs["headers"] = headers return _kwargs - -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> AddressPublic | HTTPValidationError | None: +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> AddressPublic | HTTPValidationError | None: if response.status_code == 200: response_200 = AddressPublic.from_dict(response.json()) - - return response_200 if response.status_code == 422: response_422 = HTTPValidationError.from_dict(response.json()) - - return response_422 if client.raise_on_unexpected_status: @@ -65,7 +54,9 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[AddressPublic | HTTPValidationError]: +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[AddressPublic | HTTPValidationError]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -79,9 +70,8 @@ def sync_detailed( *, client: AuthenticatedClient, body: AddressUpdate, - ) -> Response[AddressPublic | HTTPValidationError]: - """ Update Address + """Update Address Update an address. @@ -95,13 +85,11 @@ def sync_detailed( Returns: Response[AddressPublic | HTTPValidationError] - """ - + """ kwargs = _get_kwargs( address_id=address_id, -body=body, - + body=body, ) response = client.get_httpx_client().request( @@ -110,14 +98,14 @@ def sync_detailed( return _build_response(client=client, response=response) + def sync( address_id: UUID, *, client: AuthenticatedClient, body: AddressUpdate, - ) -> AddressPublic | HTTPValidationError | None: - """ Update Address + """Update Address Update an address. @@ -131,24 +119,22 @@ def sync( Returns: AddressPublic | HTTPValidationError - """ - + """ return sync_detailed( address_id=address_id, -client=client, -body=body, - + client=client, + body=body, ).parsed + async def asyncio_detailed( address_id: UUID, *, client: AuthenticatedClient, body: AddressUpdate, - ) -> Response[AddressPublic | HTTPValidationError]: - """ Update Address + """Update Address Update an address. @@ -162,29 +148,25 @@ async def asyncio_detailed( Returns: Response[AddressPublic | HTTPValidationError] - """ - + """ kwargs = _get_kwargs( address_id=address_id, -body=body, - + body=body, ) - response = await client.get_async_httpx_client().request( - **kwargs - ) + response = await client.get_async_httpx_client().request(**kwargs) return _build_response(client=client, response=response) + async def asyncio( address_id: UUID, *, client: AuthenticatedClient, body: AddressUpdate, - ) -> AddressPublic | HTTPValidationError | None: - """ Update Address + """Update Address Update an address. @@ -198,12 +180,12 @@ async def asyncio( Returns: AddressPublic | HTTPValidationError - """ - - - return (await asyncio_detailed( - address_id=address_id, -client=client, -body=body, - - )).parsed + """ + + return ( + await asyncio_detailed( + address_id=address_id, + client=client, + body=body, + ) + ).parsed diff --git a/kindred-sdk/personal_crm_client/api/calendar/__init__.py b/kindred-sdk/personal_crm_client/api/calendar/__init__.py index c9921b5f..2d7c0b23 100644 --- a/kindred-sdk/personal_crm_client/api/calendar/__init__.py +++ b/kindred-sdk/personal_crm_client/api/calendar/__init__.py @@ -1 +1 @@ -""" Contains endpoint functions for accessing the API """ +"""Contains endpoint functions for accessing the API""" diff --git a/kindred-sdk/personal_crm_client/api/calendar/calendar_get_calendar_month.py b/kindred-sdk/personal_crm_client/api/calendar/calendar_get_calendar_month.py index 151fb2e2..a6fbabdb 100644 --- a/kindred-sdk/personal_crm_client/api/calendar/calendar_get_calendar_month.py +++ b/kindred-sdk/personal_crm_client/api/calendar/calendar_get_calendar_month.py @@ -1,52 +1,40 @@ from http import HTTPStatus -from typing import Any, cast +from typing import Any from urllib.parse import quote import httpx -from ...client import AuthenticatedClient, Client -from ...types import Response, UNSET from ... import errors - +from ...client import AuthenticatedClient, Client from ...models.calendar_month_response import CalendarMonthResponse from ...models.http_validation_error import HTTPValidationError -from typing import cast - +from ...types import Response def _get_kwargs( yyyy_mm: str, - ) -> dict[str, Any]: - - - - - - _kwargs: dict[str, Any] = { "method": "get", - "url": "/api/v1/calendar/month/{yyyy_mm}".format(yyyy_mm=quote(str(yyyy_mm), safe=""),), + "url": "/api/v1/calendar/month/{yyyy_mm}".format( + yyyy_mm=quote(str(yyyy_mm), safe=""), + ), } - return _kwargs - -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> CalendarMonthResponse | HTTPValidationError | None: +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> CalendarMonthResponse | HTTPValidationError | None: if response.status_code == 200: response_200 = CalendarMonthResponse.from_dict(response.json()) - - return response_200 if response.status_code == 422: response_422 = HTTPValidationError.from_dict(response.json()) - - return response_422 if client.raise_on_unexpected_status: @@ -55,7 +43,9 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[CalendarMonthResponse | HTTPValidationError]: +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[CalendarMonthResponse | HTTPValidationError]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -68,9 +58,8 @@ def sync_detailed( yyyy_mm: str, *, client: AuthenticatedClient, - ) -> Response[CalendarMonthResponse | HTTPValidationError]: - """ Get Calendar Month + """Get Calendar Month Args: yyyy_mm (str): @@ -81,12 +70,10 @@ def sync_detailed( Returns: Response[CalendarMonthResponse | HTTPValidationError] - """ - + """ kwargs = _get_kwargs( yyyy_mm=yyyy_mm, - ) response = client.get_httpx_client().request( @@ -95,13 +82,13 @@ def sync_detailed( return _build_response(client=client, response=response) + def sync( yyyy_mm: str, *, client: AuthenticatedClient, - ) -> CalendarMonthResponse | HTTPValidationError | None: - """ Get Calendar Month + """Get Calendar Month Args: yyyy_mm (str): @@ -112,22 +99,20 @@ def sync( Returns: CalendarMonthResponse | HTTPValidationError - """ - + """ return sync_detailed( yyyy_mm=yyyy_mm, -client=client, - + client=client, ).parsed + async def asyncio_detailed( yyyy_mm: str, *, client: AuthenticatedClient, - ) -> Response[CalendarMonthResponse | HTTPValidationError]: - """ Get Calendar Month + """Get Calendar Month Args: yyyy_mm (str): @@ -138,27 +123,23 @@ async def asyncio_detailed( Returns: Response[CalendarMonthResponse | HTTPValidationError] - """ - + """ kwargs = _get_kwargs( yyyy_mm=yyyy_mm, - ) - response = await client.get_async_httpx_client().request( - **kwargs - ) + response = await client.get_async_httpx_client().request(**kwargs) return _build_response(client=client, response=response) + async def asyncio( yyyy_mm: str, *, client: AuthenticatedClient, - ) -> CalendarMonthResponse | HTTPValidationError | None: - """ Get Calendar Month + """Get Calendar Month Args: yyyy_mm (str): @@ -169,11 +150,11 @@ async def asyncio( Returns: CalendarMonthResponse | HTTPValidationError - """ + """ - - return (await asyncio_detailed( - yyyy_mm=yyyy_mm, -client=client, - - )).parsed + return ( + await asyncio_detailed( + yyyy_mm=yyyy_mm, + client=client, + ) + ).parsed diff --git a/kindred-sdk/personal_crm_client/api/carddav/__init__.py b/kindred-sdk/personal_crm_client/api/carddav/__init__.py index c9921b5f..2d7c0b23 100644 --- a/kindred-sdk/personal_crm_client/api/carddav/__init__.py +++ b/kindred-sdk/personal_crm_client/api/carddav/__init__.py @@ -1 +1 @@ -""" Contains endpoint functions for accessing the API """ +"""Contains endpoint functions for accessing the API""" diff --git a/kindred-sdk/personal_crm_client/api/carddav/carddav_well_known_carddav.py b/kindred-sdk/personal_crm_client/api/carddav/carddav_well_known_carddav.py index 401ccf16..28c74d80 100644 --- a/kindred-sdk/personal_crm_client/api/carddav/carddav_well_known_carddav.py +++ b/kindred-sdk/personal_crm_client/api/carddav/carddav_well_known_carddav.py @@ -1,35 +1,22 @@ from http import HTTPStatus -from typing import Any, cast -from urllib.parse import quote +from typing import Any import httpx -from ...client import AuthenticatedClient, Client -from ...types import Response, UNSET from ... import errors +from ...client import AuthenticatedClient, Client +from ...types import Response - - -def _get_kwargs( - -) -> dict[str, Any]: - - - - - - +def _get_kwargs() -> dict[str, Any]: _kwargs: dict[str, Any] = { "method": "get", "url": "/.well-known/carddav", } - return _kwargs - def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Any | None: if response.status_code == 200: return None @@ -52,9 +39,8 @@ def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Res def sync_detailed( *, client: AuthenticatedClient | Client, - ) -> Response[Any]: - """ Well Known Carddav + """Well Known Carddav Redirect to CardDAV server for iOS/macOS client discovery. @@ -64,12 +50,9 @@ def sync_detailed( Returns: Response[Any] - """ - + """ - kwargs = _get_kwargs( - - ) + kwargs = _get_kwargs() response = client.get_httpx_client().request( **kwargs, @@ -81,9 +64,8 @@ def sync_detailed( async def asyncio_detailed( *, client: AuthenticatedClient | Client, - ) -> Response[Any]: - """ Well Known Carddav + """Well Known Carddav Redirect to CardDAV server for iOS/macOS client discovery. @@ -93,16 +75,10 @@ async def asyncio_detailed( Returns: Response[Any] - """ + """ + kwargs = _get_kwargs() - kwargs = _get_kwargs( - - ) - - response = await client.get_async_httpx_client().request( - **kwargs - ) + response = await client.get_async_httpx_client().request(**kwargs) return _build_response(client=client, response=response) - diff --git a/kindred-sdk/personal_crm_client/api/contact_fields/__init__.py b/kindred-sdk/personal_crm_client/api/contact_fields/__init__.py index c9921b5f..2d7c0b23 100644 --- a/kindred-sdk/personal_crm_client/api/contact_fields/__init__.py +++ b/kindred-sdk/personal_crm_client/api/contact_fields/__init__.py @@ -1 +1 @@ -""" Contains endpoint functions for accessing the API """ +"""Contains endpoint functions for accessing the API""" diff --git a/kindred-sdk/personal_crm_client/api/contact_fields/contact_fields_create_contact_field_route.py b/kindred-sdk/personal_crm_client/api/contact_fields/contact_fields_create_contact_field_route.py index b54d005d..3e0ce4f4 100644 --- a/kindred-sdk/personal_crm_client/api/contact_fields/contact_fields_create_contact_field_route.py +++ b/kindred-sdk/personal_crm_client/api/contact_fields/contact_fields_create_contact_field_route.py @@ -1,32 +1,22 @@ from http import HTTPStatus -from typing import Any, cast -from urllib.parse import quote +from typing import Any import httpx -from ...client import AuthenticatedClient, Client -from ...types import Response, UNSET from ... import errors - +from ...client import AuthenticatedClient, Client from ...models.contact_field_create import ContactFieldCreate from ...models.contact_field_public import ContactFieldPublic from ...models.http_validation_error import HTTPValidationError -from typing import cast - +from ...types import Response def _get_kwargs( *, body: ContactFieldCreate, - ) -> dict[str, Any]: headers: dict[str, Any] = {} - - - - - _kwargs: dict[str, Any] = { "method": "post", "url": "/api/v1/contact-fields/", @@ -34,27 +24,23 @@ def _get_kwargs( _kwargs["json"] = body.to_dict() - headers["Content-Type"] = "application/json" _kwargs["headers"] = headers return _kwargs - -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> ContactFieldPublic | HTTPValidationError | None: +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> ContactFieldPublic | HTTPValidationError | None: if response.status_code == 200: response_200 = ContactFieldPublic.from_dict(response.json()) - - return response_200 if response.status_code == 422: response_422 = HTTPValidationError.from_dict(response.json()) - - return response_422 if client.raise_on_unexpected_status: @@ -63,7 +49,9 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[ContactFieldPublic | HTTPValidationError]: +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[ContactFieldPublic | HTTPValidationError]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -76,9 +64,8 @@ def sync_detailed( *, client: AuthenticatedClient, body: ContactFieldCreate, - ) -> Response[ContactFieldPublic | HTTPValidationError]: - """ Create Contact Field Route + """Create Contact Field Route Create a new contact field. @@ -91,12 +78,10 @@ def sync_detailed( Returns: Response[ContactFieldPublic | HTTPValidationError] - """ - + """ kwargs = _get_kwargs( body=body, - ) response = client.get_httpx_client().request( @@ -105,13 +90,13 @@ def sync_detailed( return _build_response(client=client, response=response) + def sync( *, client: AuthenticatedClient, body: ContactFieldCreate, - ) -> ContactFieldPublic | HTTPValidationError | None: - """ Create Contact Field Route + """Create Contact Field Route Create a new contact field. @@ -124,22 +109,20 @@ def sync( Returns: ContactFieldPublic | HTTPValidationError - """ - + """ return sync_detailed( client=client, -body=body, - + body=body, ).parsed + async def asyncio_detailed( *, client: AuthenticatedClient, body: ContactFieldCreate, - ) -> Response[ContactFieldPublic | HTTPValidationError]: - """ Create Contact Field Route + """Create Contact Field Route Create a new contact field. @@ -152,27 +135,23 @@ async def asyncio_detailed( Returns: Response[ContactFieldPublic | HTTPValidationError] - """ - + """ kwargs = _get_kwargs( body=body, - ) - response = await client.get_async_httpx_client().request( - **kwargs - ) + response = await client.get_async_httpx_client().request(**kwargs) return _build_response(client=client, response=response) + async def asyncio( *, client: AuthenticatedClient, body: ContactFieldCreate, - ) -> ContactFieldPublic | HTTPValidationError | None: - """ Create Contact Field Route + """Create Contact Field Route Create a new contact field. @@ -185,11 +164,11 @@ async def asyncio( Returns: ContactFieldPublic | HTTPValidationError - """ + """ - - return (await asyncio_detailed( - client=client, -body=body, - - )).parsed + return ( + await asyncio_detailed( + client=client, + body=body, + ) + ).parsed diff --git a/kindred-sdk/personal_crm_client/api/contact_fields/contact_fields_delete_contact_field.py b/kindred-sdk/personal_crm_client/api/contact_fields/contact_fields_delete_contact_field.py index eeea1570..59eeb520 100644 --- a/kindred-sdk/personal_crm_client/api/contact_fields/contact_fields_delete_contact_field.py +++ b/kindred-sdk/personal_crm_client/api/contact_fields/contact_fields_delete_contact_field.py @@ -1,40 +1,32 @@ from http import HTTPStatus -from typing import Any, cast +from typing import Any from urllib.parse import quote +from uuid import UUID import httpx -from ...client import AuthenticatedClient, Client -from ...types import Response, UNSET from ... import errors - +from ...client import AuthenticatedClient, Client from ...models.http_validation_error import HTTPValidationError -from typing import cast -from uuid import UUID - +from ...types import Response def _get_kwargs( field_id: UUID, - ) -> dict[str, Any]: - - - - - - _kwargs: dict[str, Any] = { "method": "delete", - "url": "/api/v1/contact-fields/{field_id}".format(field_id=quote(str(field_id), safe=""),), + "url": "/api/v1/contact-fields/{field_id}".format( + field_id=quote(str(field_id), safe=""), + ), } - return _kwargs - -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Any | HTTPValidationError | None: +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Any | HTTPValidationError | None: if response.status_code == 200: response_200 = response.json() return response_200 @@ -42,8 +34,6 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res if response.status_code == 422: response_422 = HTTPValidationError.from_dict(response.json()) - - return response_422 if client.raise_on_unexpected_status: @@ -52,7 +42,9 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[Any | HTTPValidationError]: +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[Any | HTTPValidationError]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -65,9 +57,8 @@ def sync_detailed( field_id: UUID, *, client: AuthenticatedClient, - ) -> Response[Any | HTTPValidationError]: - """ Delete Contact Field + """Delete Contact Field Delete a contact field. @@ -80,12 +71,10 @@ def sync_detailed( Returns: Response[Any | HTTPValidationError] - """ - + """ kwargs = _get_kwargs( field_id=field_id, - ) response = client.get_httpx_client().request( @@ -94,13 +83,13 @@ def sync_detailed( return _build_response(client=client, response=response) + def sync( field_id: UUID, *, client: AuthenticatedClient, - ) -> Any | HTTPValidationError | None: - """ Delete Contact Field + """Delete Contact Field Delete a contact field. @@ -113,22 +102,20 @@ def sync( Returns: Any | HTTPValidationError - """ - + """ return sync_detailed( field_id=field_id, -client=client, - + client=client, ).parsed + async def asyncio_detailed( field_id: UUID, *, client: AuthenticatedClient, - ) -> Response[Any | HTTPValidationError]: - """ Delete Contact Field + """Delete Contact Field Delete a contact field. @@ -141,27 +128,23 @@ async def asyncio_detailed( Returns: Response[Any | HTTPValidationError] - """ - + """ kwargs = _get_kwargs( field_id=field_id, - ) - response = await client.get_async_httpx_client().request( - **kwargs - ) + response = await client.get_async_httpx_client().request(**kwargs) return _build_response(client=client, response=response) + async def asyncio( field_id: UUID, *, client: AuthenticatedClient, - ) -> Any | HTTPValidationError | None: - """ Delete Contact Field + """Delete Contact Field Delete a contact field. @@ -174,11 +157,11 @@ async def asyncio( Returns: Any | HTTPValidationError - """ + """ - - return (await asyncio_detailed( - field_id=field_id, -client=client, - - )).parsed + return ( + await asyncio_detailed( + field_id=field_id, + client=client, + ) + ).parsed diff --git a/kindred-sdk/personal_crm_client/api/contact_fields/contact_fields_list_contact_fields.py b/kindred-sdk/personal_crm_client/api/contact_fields/contact_fields_list_contact_fields.py index 2b1c555c..f2c81487 100644 --- a/kindred-sdk/personal_crm_client/api/contact_fields/contact_fields_list_contact_fields.py +++ b/kindred-sdk/personal_crm_client/api/contact_fields/contact_fields_list_contact_fields.py @@ -1,18 +1,14 @@ from http import HTTPStatus -from typing import Any, cast +from typing import Any from urllib.parse import quote +from uuid import UUID import httpx -from ...client import AuthenticatedClient, Client -from ...types import Response, UNSET from ... import errors - +from ...client import AuthenticatedClient, Client from ...models.http_validation_error import HTTPValidationError -from ...types import UNSET, Unset -from typing import cast -from uuid import UUID - +from ...types import UNSET, Response, Unset def _get_kwargs( @@ -20,34 +16,29 @@ def _get_kwargs( *, skip: int | Unset = 0, limit: int | Unset = 100, - ) -> dict[str, Any]: - - - - params: dict[str, Any] = {} params["skip"] = skip params["limit"] = limit - params = {k: v for k, v in params.items() if v is not UNSET and v is not None} - _kwargs: dict[str, Any] = { "method": "get", - "url": "/api/v1/contact-fields/contact/{contact_id}".format(contact_id=quote(str(contact_id), safe=""),), + "url": "/api/v1/contact-fields/contact/{contact_id}".format( + contact_id=quote(str(contact_id), safe=""), + ), "params": params, } - return _kwargs - -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Any | HTTPValidationError | None: +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Any | HTTPValidationError | None: if response.status_code == 200: response_200 = response.json() return response_200 @@ -55,8 +46,6 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res if response.status_code == 422: response_422 = HTTPValidationError.from_dict(response.json()) - - return response_422 if client.raise_on_unexpected_status: @@ -65,7 +54,9 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[Any | HTTPValidationError]: +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[Any | HTTPValidationError]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -80,9 +71,8 @@ def sync_detailed( client: AuthenticatedClient, skip: int | Unset = 0, limit: int | Unset = 100, - ) -> Response[Any | HTTPValidationError]: - """ List Contact Fields + """List Contact Fields List all fields for a contact. @@ -97,14 +87,12 @@ def sync_detailed( Returns: Response[Any | HTTPValidationError] - """ - + """ kwargs = _get_kwargs( contact_id=contact_id, -skip=skip, -limit=limit, - + skip=skip, + limit=limit, ) response = client.get_httpx_client().request( @@ -113,15 +101,15 @@ def sync_detailed( return _build_response(client=client, response=response) + def sync( contact_id: UUID, *, client: AuthenticatedClient, skip: int | Unset = 0, limit: int | Unset = 100, - ) -> Any | HTTPValidationError | None: - """ List Contact Fields + """List Contact Fields List all fields for a contact. @@ -136,26 +124,24 @@ def sync( Returns: Any | HTTPValidationError - """ - + """ return sync_detailed( contact_id=contact_id, -client=client, -skip=skip, -limit=limit, - + client=client, + skip=skip, + limit=limit, ).parsed + async def asyncio_detailed( contact_id: UUID, *, client: AuthenticatedClient, skip: int | Unset = 0, limit: int | Unset = 100, - ) -> Response[Any | HTTPValidationError]: - """ List Contact Fields + """List Contact Fields List all fields for a contact. @@ -170,31 +156,27 @@ async def asyncio_detailed( Returns: Response[Any | HTTPValidationError] - """ - + """ kwargs = _get_kwargs( contact_id=contact_id, -skip=skip, -limit=limit, - + skip=skip, + limit=limit, ) - response = await client.get_async_httpx_client().request( - **kwargs - ) + response = await client.get_async_httpx_client().request(**kwargs) return _build_response(client=client, response=response) + async def asyncio( contact_id: UUID, *, client: AuthenticatedClient, skip: int | Unset = 0, limit: int | Unset = 100, - ) -> Any | HTTPValidationError | None: - """ List Contact Fields + """List Contact Fields List all fields for a contact. @@ -209,13 +191,13 @@ async def asyncio( Returns: Any | HTTPValidationError - """ - - - return (await asyncio_detailed( - contact_id=contact_id, -client=client, -skip=skip, -limit=limit, - - )).parsed + """ + + return ( + await asyncio_detailed( + contact_id=contact_id, + client=client, + skip=skip, + limit=limit, + ) + ).parsed diff --git a/kindred-sdk/personal_crm_client/api/contact_fields/contact_fields_update_contact_field.py b/kindred-sdk/personal_crm_client/api/contact_fields/contact_fields_update_contact_field.py index 32616e2d..e15ffba9 100644 --- a/kindred-sdk/personal_crm_client/api/contact_fields/contact_fields_update_contact_field.py +++ b/kindred-sdk/personal_crm_client/api/contact_fields/contact_fields_update_contact_field.py @@ -1,62 +1,51 @@ from http import HTTPStatus -from typing import Any, cast +from typing import Any from urllib.parse import quote +from uuid import UUID import httpx -from ...client import AuthenticatedClient, Client -from ...types import Response, UNSET from ... import errors - +from ...client import AuthenticatedClient, Client from ...models.contact_field_public import ContactFieldPublic from ...models.contact_field_update import ContactFieldUpdate from ...models.http_validation_error import HTTPValidationError -from typing import cast -from uuid import UUID - +from ...types import Response def _get_kwargs( field_id: UUID, *, body: ContactFieldUpdate, - ) -> dict[str, Any]: headers: dict[str, Any] = {} - - - - - _kwargs: dict[str, Any] = { "method": "patch", - "url": "/api/v1/contact-fields/{field_id}".format(field_id=quote(str(field_id), safe=""),), + "url": "/api/v1/contact-fields/{field_id}".format( + field_id=quote(str(field_id), safe=""), + ), } _kwargs["json"] = body.to_dict() - headers["Content-Type"] = "application/json" _kwargs["headers"] = headers return _kwargs - -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> ContactFieldPublic | HTTPValidationError | None: +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> ContactFieldPublic | HTTPValidationError | None: if response.status_code == 200: response_200 = ContactFieldPublic.from_dict(response.json()) - - return response_200 if response.status_code == 422: response_422 = HTTPValidationError.from_dict(response.json()) - - return response_422 if client.raise_on_unexpected_status: @@ -65,7 +54,9 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[ContactFieldPublic | HTTPValidationError]: +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[ContactFieldPublic | HTTPValidationError]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -79,9 +70,8 @@ def sync_detailed( *, client: AuthenticatedClient, body: ContactFieldUpdate, - ) -> Response[ContactFieldPublic | HTTPValidationError]: - """ Update Contact Field + """Update Contact Field Update a contact field. @@ -95,13 +85,11 @@ def sync_detailed( Returns: Response[ContactFieldPublic | HTTPValidationError] - """ - + """ kwargs = _get_kwargs( field_id=field_id, -body=body, - + body=body, ) response = client.get_httpx_client().request( @@ -110,14 +98,14 @@ def sync_detailed( return _build_response(client=client, response=response) + def sync( field_id: UUID, *, client: AuthenticatedClient, body: ContactFieldUpdate, - ) -> ContactFieldPublic | HTTPValidationError | None: - """ Update Contact Field + """Update Contact Field Update a contact field. @@ -131,24 +119,22 @@ def sync( Returns: ContactFieldPublic | HTTPValidationError - """ - + """ return sync_detailed( field_id=field_id, -client=client, -body=body, - + client=client, + body=body, ).parsed + async def asyncio_detailed( field_id: UUID, *, client: AuthenticatedClient, body: ContactFieldUpdate, - ) -> Response[ContactFieldPublic | HTTPValidationError]: - """ Update Contact Field + """Update Contact Field Update a contact field. @@ -162,29 +148,25 @@ async def asyncio_detailed( Returns: Response[ContactFieldPublic | HTTPValidationError] - """ - + """ kwargs = _get_kwargs( field_id=field_id, -body=body, - + body=body, ) - response = await client.get_async_httpx_client().request( - **kwargs - ) + response = await client.get_async_httpx_client().request(**kwargs) return _build_response(client=client, response=response) + async def asyncio( field_id: UUID, *, client: AuthenticatedClient, body: ContactFieldUpdate, - ) -> ContactFieldPublic | HTTPValidationError | None: - """ Update Contact Field + """Update Contact Field Update a contact field. @@ -198,12 +180,12 @@ async def asyncio( Returns: ContactFieldPublic | HTTPValidationError - """ - - - return (await asyncio_detailed( - field_id=field_id, -client=client, -body=body, - - )).parsed + """ + + return ( + await asyncio_detailed( + field_id=field_id, + client=client, + body=body, + ) + ).parsed diff --git a/kindred-sdk/personal_crm_client/api/contacts/__init__.py b/kindred-sdk/personal_crm_client/api/contacts/__init__.py index c9921b5f..2d7c0b23 100644 --- a/kindred-sdk/personal_crm_client/api/contacts/__init__.py +++ b/kindred-sdk/personal_crm_client/api/contacts/__init__.py @@ -1 +1 @@ -""" Contains endpoint functions for accessing the API """ +"""Contains endpoint functions for accessing the API""" diff --git a/kindred-sdk/personal_crm_client/api/contacts/contacts_create_contact.py b/kindred-sdk/personal_crm_client/api/contacts/contacts_create_contact.py index bc49098d..9dd2d687 100644 --- a/kindred-sdk/personal_crm_client/api/contacts/contacts_create_contact.py +++ b/kindred-sdk/personal_crm_client/api/contacts/contacts_create_contact.py @@ -1,32 +1,22 @@ from http import HTTPStatus -from typing import Any, cast -from urllib.parse import quote +from typing import Any import httpx -from ...client import AuthenticatedClient, Client -from ...types import Response, UNSET from ... import errors - +from ...client import AuthenticatedClient, Client from ...models.contact_create import ContactCreate from ...models.contact_public import ContactPublic from ...models.http_validation_error import HTTPValidationError -from typing import cast - +from ...types import Response def _get_kwargs( *, body: ContactCreate, - ) -> dict[str, Any]: headers: dict[str, Any] = {} - - - - - _kwargs: dict[str, Any] = { "method": "post", "url": "/api/v1/contacts/", @@ -34,27 +24,23 @@ def _get_kwargs( _kwargs["json"] = body.to_dict() - headers["Content-Type"] = "application/json" _kwargs["headers"] = headers return _kwargs - -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> ContactPublic | HTTPValidationError | None: +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> ContactPublic | HTTPValidationError | None: if response.status_code == 200: response_200 = ContactPublic.from_dict(response.json()) - - return response_200 if response.status_code == 422: response_422 = HTTPValidationError.from_dict(response.json()) - - return response_422 if client.raise_on_unexpected_status: @@ -63,7 +49,9 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[ContactPublic | HTTPValidationError]: +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[ContactPublic | HTTPValidationError]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -76,9 +64,8 @@ def sync_detailed( *, client: AuthenticatedClient, body: ContactCreate, - ) -> Response[ContactPublic | HTTPValidationError]: - """ Create Contact + """Create Contact Create a new contact. @@ -91,12 +78,10 @@ def sync_detailed( Returns: Response[ContactPublic | HTTPValidationError] - """ - + """ kwargs = _get_kwargs( body=body, - ) response = client.get_httpx_client().request( @@ -105,13 +90,13 @@ def sync_detailed( return _build_response(client=client, response=response) + def sync( *, client: AuthenticatedClient, body: ContactCreate, - ) -> ContactPublic | HTTPValidationError | None: - """ Create Contact + """Create Contact Create a new contact. @@ -124,22 +109,20 @@ def sync( Returns: ContactPublic | HTTPValidationError - """ - + """ return sync_detailed( client=client, -body=body, - + body=body, ).parsed + async def asyncio_detailed( *, client: AuthenticatedClient, body: ContactCreate, - ) -> Response[ContactPublic | HTTPValidationError]: - """ Create Contact + """Create Contact Create a new contact. @@ -152,27 +135,23 @@ async def asyncio_detailed( Returns: Response[ContactPublic | HTTPValidationError] - """ - + """ kwargs = _get_kwargs( body=body, - ) - response = await client.get_async_httpx_client().request( - **kwargs - ) + response = await client.get_async_httpx_client().request(**kwargs) return _build_response(client=client, response=response) + async def asyncio( *, client: AuthenticatedClient, body: ContactCreate, - ) -> ContactPublic | HTTPValidationError | None: - """ Create Contact + """Create Contact Create a new contact. @@ -185,11 +164,11 @@ async def asyncio( Returns: ContactPublic | HTTPValidationError - """ + """ - - return (await asyncio_detailed( - client=client, -body=body, - - )).parsed + return ( + await asyncio_detailed( + client=client, + body=body, + ) + ).parsed diff --git a/kindred-sdk/personal_crm_client/api/contacts/contacts_delete_contact.py b/kindred-sdk/personal_crm_client/api/contacts/contacts_delete_contact.py index 6c48bc76..e757a5b0 100644 --- a/kindred-sdk/personal_crm_client/api/contacts/contacts_delete_contact.py +++ b/kindred-sdk/personal_crm_client/api/contacts/contacts_delete_contact.py @@ -1,40 +1,32 @@ from http import HTTPStatus -from typing import Any, cast +from typing import Any from urllib.parse import quote +from uuid import UUID import httpx -from ...client import AuthenticatedClient, Client -from ...types import Response, UNSET from ... import errors - +from ...client import AuthenticatedClient, Client from ...models.http_validation_error import HTTPValidationError -from typing import cast -from uuid import UUID - +from ...types import Response def _get_kwargs( contact_id: UUID, - ) -> dict[str, Any]: - - - - - - _kwargs: dict[str, Any] = { "method": "delete", - "url": "/api/v1/contacts/{contact_id}".format(contact_id=quote(str(contact_id), safe=""),), + "url": "/api/v1/contacts/{contact_id}".format( + contact_id=quote(str(contact_id), safe=""), + ), } - return _kwargs - -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Any | HTTPValidationError | None: +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Any | HTTPValidationError | None: if response.status_code == 200: response_200 = response.json() return response_200 @@ -42,8 +34,6 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res if response.status_code == 422: response_422 = HTTPValidationError.from_dict(response.json()) - - return response_422 if client.raise_on_unexpected_status: @@ -52,7 +42,9 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[Any | HTTPValidationError]: +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[Any | HTTPValidationError]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -65,9 +57,8 @@ def sync_detailed( contact_id: UUID, *, client: AuthenticatedClient, - ) -> Response[Any | HTTPValidationError]: - """ Delete Contact + """Delete Contact Soft-delete a contact. @@ -85,12 +76,10 @@ def sync_detailed( Returns: Response[Any | HTTPValidationError] - """ - + """ kwargs = _get_kwargs( contact_id=contact_id, - ) response = client.get_httpx_client().request( @@ -99,13 +88,13 @@ def sync_detailed( return _build_response(client=client, response=response) + def sync( contact_id: UUID, *, client: AuthenticatedClient, - ) -> Any | HTTPValidationError | None: - """ Delete Contact + """Delete Contact Soft-delete a contact. @@ -123,22 +112,20 @@ def sync( Returns: Any | HTTPValidationError - """ - + """ return sync_detailed( contact_id=contact_id, -client=client, - + client=client, ).parsed + async def asyncio_detailed( contact_id: UUID, *, client: AuthenticatedClient, - ) -> Response[Any | HTTPValidationError]: - """ Delete Contact + """Delete Contact Soft-delete a contact. @@ -156,27 +143,23 @@ async def asyncio_detailed( Returns: Response[Any | HTTPValidationError] - """ - + """ kwargs = _get_kwargs( contact_id=contact_id, - ) - response = await client.get_async_httpx_client().request( - **kwargs - ) + response = await client.get_async_httpx_client().request(**kwargs) return _build_response(client=client, response=response) + async def asyncio( contact_id: UUID, *, client: AuthenticatedClient, - ) -> Any | HTTPValidationError | None: - """ Delete Contact + """Delete Contact Soft-delete a contact. @@ -194,11 +177,11 @@ async def asyncio( Returns: Any | HTTPValidationError - """ + """ - - return (await asyncio_detailed( - contact_id=contact_id, -client=client, - - )).parsed + return ( + await asyncio_detailed( + contact_id=contact_id, + client=client, + ) + ).parsed diff --git a/kindred-sdk/personal_crm_client/api/contacts/contacts_get_contact.py b/kindred-sdk/personal_crm_client/api/contacts/contacts_get_contact.py index 09d4d70e..8ea08ea6 100644 --- a/kindred-sdk/personal_crm_client/api/contacts/contacts_get_contact.py +++ b/kindred-sdk/personal_crm_client/api/contacts/contacts_get_contact.py @@ -1,53 +1,41 @@ from http import HTTPStatus -from typing import Any, cast +from typing import Any from urllib.parse import quote +from uuid import UUID import httpx -from ...client import AuthenticatedClient, Client -from ...types import Response, UNSET from ... import errors - +from ...client import AuthenticatedClient, Client from ...models.contact_public import ContactPublic from ...models.http_validation_error import HTTPValidationError -from typing import cast -from uuid import UUID - +from ...types import Response def _get_kwargs( contact_id: UUID, - ) -> dict[str, Any]: - - - - - - _kwargs: dict[str, Any] = { "method": "get", - "url": "/api/v1/contacts/{contact_id}".format(contact_id=quote(str(contact_id), safe=""),), + "url": "/api/v1/contacts/{contact_id}".format( + contact_id=quote(str(contact_id), safe=""), + ), } - return _kwargs - -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> ContactPublic | HTTPValidationError | None: +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> ContactPublic | HTTPValidationError | None: if response.status_code == 200: response_200 = ContactPublic.from_dict(response.json()) - - return response_200 if response.status_code == 422: response_422 = HTTPValidationError.from_dict(response.json()) - - return response_422 if client.raise_on_unexpected_status: @@ -56,7 +44,9 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[ContactPublic | HTTPValidationError]: +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[ContactPublic | HTTPValidationError]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -69,9 +59,8 @@ def sync_detailed( contact_id: UUID, *, client: AuthenticatedClient, - ) -> Response[ContactPublic | HTTPValidationError]: - """ Get Contact + """Get Contact Get a single contact by ID. @@ -84,12 +73,10 @@ def sync_detailed( Returns: Response[ContactPublic | HTTPValidationError] - """ - + """ kwargs = _get_kwargs( contact_id=contact_id, - ) response = client.get_httpx_client().request( @@ -98,13 +85,13 @@ def sync_detailed( return _build_response(client=client, response=response) + def sync( contact_id: UUID, *, client: AuthenticatedClient, - ) -> ContactPublic | HTTPValidationError | None: - """ Get Contact + """Get Contact Get a single contact by ID. @@ -117,22 +104,20 @@ def sync( Returns: ContactPublic | HTTPValidationError - """ - + """ return sync_detailed( contact_id=contact_id, -client=client, - + client=client, ).parsed + async def asyncio_detailed( contact_id: UUID, *, client: AuthenticatedClient, - ) -> Response[ContactPublic | HTTPValidationError]: - """ Get Contact + """Get Contact Get a single contact by ID. @@ -145,27 +130,23 @@ async def asyncio_detailed( Returns: Response[ContactPublic | HTTPValidationError] - """ - + """ kwargs = _get_kwargs( contact_id=contact_id, - ) - response = await client.get_async_httpx_client().request( - **kwargs - ) + response = await client.get_async_httpx_client().request(**kwargs) return _build_response(client=client, response=response) + async def asyncio( contact_id: UUID, *, client: AuthenticatedClient, - ) -> ContactPublic | HTTPValidationError | None: - """ Get Contact + """Get Contact Get a single contact by ID. @@ -178,11 +159,11 @@ async def asyncio( Returns: ContactPublic | HTTPValidationError - """ + """ - - return (await asyncio_detailed( - contact_id=contact_id, -client=client, - - )).parsed + return ( + await asyncio_detailed( + contact_id=contact_id, + client=client, + ) + ).parsed diff --git a/kindred-sdk/personal_crm_client/api/contacts/contacts_get_contact_household.py b/kindred-sdk/personal_crm_client/api/contacts/contacts_get_contact_household.py index 8c5bdb72..e7d0ffd4 100644 --- a/kindred-sdk/personal_crm_client/api/contacts/contacts_get_contact_household.py +++ b/kindred-sdk/personal_crm_client/api/contacts/contacts_get_contact_household.py @@ -1,40 +1,32 @@ from http import HTTPStatus -from typing import Any, cast +from typing import Any from urllib.parse import quote +from uuid import UUID import httpx -from ...client import AuthenticatedClient, Client -from ...types import Response, UNSET from ... import errors - +from ...client import AuthenticatedClient, Client from ...models.http_validation_error import HTTPValidationError -from typing import cast -from uuid import UUID - +from ...types import Response def _get_kwargs( contact_id: UUID, - ) -> dict[str, Any]: - - - - - - _kwargs: dict[str, Any] = { "method": "get", - "url": "/api/v1/contacts/{contact_id}/household".format(contact_id=quote(str(contact_id), safe=""),), + "url": "/api/v1/contacts/{contact_id}/household".format( + contact_id=quote(str(contact_id), safe=""), + ), } - return _kwargs - -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Any | HTTPValidationError | None: +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Any | HTTPValidationError | None: if response.status_code == 200: response_200 = response.json() return response_200 @@ -42,8 +34,6 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res if response.status_code == 422: response_422 = HTTPValidationError.from_dict(response.json()) - - return response_422 if client.raise_on_unexpected_status: @@ -52,7 +42,9 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[Any | HTTPValidationError]: +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[Any | HTTPValidationError]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -65,9 +57,8 @@ def sync_detailed( contact_id: UUID, *, client: AuthenticatedClient, - ) -> Response[Any | HTTPValidationError]: - """ Get Contact Household + """Get Contact Household Get household members for a contact. @@ -83,12 +74,10 @@ def sync_detailed( Returns: Response[Any | HTTPValidationError] - """ - + """ kwargs = _get_kwargs( contact_id=contact_id, - ) response = client.get_httpx_client().request( @@ -97,13 +86,13 @@ def sync_detailed( return _build_response(client=client, response=response) + def sync( contact_id: UUID, *, client: AuthenticatedClient, - ) -> Any | HTTPValidationError | None: - """ Get Contact Household + """Get Contact Household Get household members for a contact. @@ -119,22 +108,20 @@ def sync( Returns: Any | HTTPValidationError - """ - + """ return sync_detailed( contact_id=contact_id, -client=client, - + client=client, ).parsed + async def asyncio_detailed( contact_id: UUID, *, client: AuthenticatedClient, - ) -> Response[Any | HTTPValidationError]: - """ Get Contact Household + """Get Contact Household Get household members for a contact. @@ -150,27 +137,23 @@ async def asyncio_detailed( Returns: Response[Any | HTTPValidationError] - """ - + """ kwargs = _get_kwargs( contact_id=contact_id, - ) - response = await client.get_async_httpx_client().request( - **kwargs - ) + response = await client.get_async_httpx_client().request(**kwargs) return _build_response(client=client, response=response) + async def asyncio( contact_id: UUID, *, client: AuthenticatedClient, - ) -> Any | HTTPValidationError | None: - """ Get Contact Household + """Get Contact Household Get household members for a contact. @@ -186,11 +169,11 @@ async def asyncio( Returns: Any | HTTPValidationError - """ + """ - - return (await asyncio_detailed( - contact_id=contact_id, -client=client, - - )).parsed + return ( + await asyncio_detailed( + contact_id=contact_id, + client=client, + ) + ).parsed diff --git a/kindred-sdk/personal_crm_client/api/contacts/contacts_list_contact_mentions.py b/kindred-sdk/personal_crm_client/api/contacts/contacts_list_contact_mentions.py index 73115c7c..fe033d4b 100644 --- a/kindred-sdk/personal_crm_client/api/contacts/contacts_list_contact_mentions.py +++ b/kindred-sdk/personal_crm_client/api/contacts/contacts_list_contact_mentions.py @@ -1,49 +1,39 @@ from http import HTTPStatus -from typing import Any, cast +from typing import Any from urllib.parse import quote +from uuid import UUID import httpx -from ...client import AuthenticatedClient, Client -from ...types import Response, UNSET from ... import errors - +from ...client import AuthenticatedClient, Client from ...models.http_validation_error import HTTPValidationError from ...models.note_mention_public import NoteMentionPublic -from typing import cast -from uuid import UUID - +from ...types import Response def _get_kwargs( contact_id: UUID, - ) -> dict[str, Any]: - - - - - - _kwargs: dict[str, Any] = { "method": "get", - "url": "/api/v1/contacts/{contact_id}/mentions".format(contact_id=quote(str(contact_id), safe=""),), + "url": "/api/v1/contacts/{contact_id}/mentions".format( + contact_id=quote(str(contact_id), safe=""), + ), } - return _kwargs - -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> HTTPValidationError | list[NoteMentionPublic] | None: +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> HTTPValidationError | list[NoteMentionPublic] | None: if response.status_code == 200: response_200 = [] _response_200 = response.json() - for response_200_item_data in (_response_200): + for response_200_item_data in _response_200: response_200_item = NoteMentionPublic.from_dict(response_200_item_data) - - response_200.append(response_200_item) return response_200 @@ -51,8 +41,6 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res if response.status_code == 422: response_422 = HTTPValidationError.from_dict(response.json()) - - return response_422 if client.raise_on_unexpected_status: @@ -61,7 +49,9 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[HTTPValidationError | list[NoteMentionPublic]]: +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[HTTPValidationError | list[NoteMentionPublic]]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -74,9 +64,8 @@ def sync_detailed( contact_id: UUID, *, client: AuthenticatedClient, - ) -> Response[HTTPValidationError | list[NoteMentionPublic]]: - """ List Contact Mentions + """List Contact Mentions List notes that @-mention this contact, with the source (authoring) contact. @@ -89,12 +78,10 @@ def sync_detailed( Returns: Response[HTTPValidationError | list[NoteMentionPublic]] - """ - + """ kwargs = _get_kwargs( contact_id=contact_id, - ) response = client.get_httpx_client().request( @@ -103,13 +90,13 @@ def sync_detailed( return _build_response(client=client, response=response) + def sync( contact_id: UUID, *, client: AuthenticatedClient, - ) -> HTTPValidationError | list[NoteMentionPublic] | None: - """ List Contact Mentions + """List Contact Mentions List notes that @-mention this contact, with the source (authoring) contact. @@ -122,22 +109,20 @@ def sync( Returns: HTTPValidationError | list[NoteMentionPublic] - """ - + """ return sync_detailed( contact_id=contact_id, -client=client, - + client=client, ).parsed + async def asyncio_detailed( contact_id: UUID, *, client: AuthenticatedClient, - ) -> Response[HTTPValidationError | list[NoteMentionPublic]]: - """ List Contact Mentions + """List Contact Mentions List notes that @-mention this contact, with the source (authoring) contact. @@ -150,27 +135,23 @@ async def asyncio_detailed( Returns: Response[HTTPValidationError | list[NoteMentionPublic]] - """ - + """ kwargs = _get_kwargs( contact_id=contact_id, - ) - response = await client.get_async_httpx_client().request( - **kwargs - ) + response = await client.get_async_httpx_client().request(**kwargs) return _build_response(client=client, response=response) + async def asyncio( contact_id: UUID, *, client: AuthenticatedClient, - ) -> HTTPValidationError | list[NoteMentionPublic] | None: - """ List Contact Mentions + """List Contact Mentions List notes that @-mention this contact, with the source (authoring) contact. @@ -183,11 +164,11 @@ async def asyncio( Returns: HTTPValidationError | list[NoteMentionPublic] - """ + """ - - return (await asyncio_detailed( - contact_id=contact_id, -client=client, - - )).parsed + return ( + await asyncio_detailed( + contact_id=contact_id, + client=client, + ) + ).parsed diff --git a/kindred-sdk/personal_crm_client/api/contacts/contacts_list_contacts.py b/kindred-sdk/personal_crm_client/api/contacts/contacts_list_contacts.py index 071d3c2b..4ec73315 100644 --- a/kindred-sdk/personal_crm_client/api/contacts/contacts_list_contacts.py +++ b/kindred-sdk/personal_crm_client/api/contacts/contacts_list_contacts.py @@ -1,19 +1,14 @@ from http import HTTPStatus -from typing import Any, cast -from urllib.parse import quote +from typing import Any +from uuid import UUID import httpx -from ...client import AuthenticatedClient, Client -from ...types import Response, UNSET from ... import errors - +from ...client import AuthenticatedClient, Client from ...models.contacts_public import ContactsPublic from ...models.http_validation_error import HTTPValidationError -from ...types import UNSET, Unset -from typing import cast -from uuid import UUID - +from ...types import UNSET, Response, Unset def _get_kwargs( @@ -29,12 +24,7 @@ def _get_kwargs( include_deleted: bool | Unset = False, only_deleted: bool | Unset = False, ids: list[UUID] | None | Unset = UNSET, - ) -> dict[str, Any]: - - - - params: dict[str, Any] = {} params["skip"] = skip @@ -100,39 +90,32 @@ def _get_kwargs( ids_type_0_item = str(ids_type_0_item_data) json_ids.append(ids_type_0_item) - else: json_ids = ids params["ids"] = json_ids - params = {k: v for k, v in params.items() if v is not UNSET and v is not None} - _kwargs: dict[str, Any] = { "method": "get", "url": "/api/v1/contacts/", "params": params, } - return _kwargs - -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> ContactsPublic | HTTPValidationError | None: +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> ContactsPublic | HTTPValidationError | None: if response.status_code == 200: response_200 = ContactsPublic.from_dict(response.json()) - - return response_200 if response.status_code == 422: response_422 = HTTPValidationError.from_dict(response.json()) - - return response_422 if client.raise_on_unexpected_status: @@ -141,7 +124,9 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[ContactsPublic | HTTPValidationError]: +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[ContactsPublic | HTTPValidationError]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -164,9 +149,8 @@ def sync_detailed( include_deleted: bool | Unset = False, only_deleted: bool | Unset = False, ids: list[UUID] | None | Unset = UNSET, - ) -> Response[ContactsPublic | HTTPValidationError]: - """ List Contacts + """List Contacts List contacts with filtering. @@ -197,22 +181,20 @@ def sync_detailed( Returns: Response[ContactsPublic | HTTPValidationError] - """ - + """ kwargs = _get_kwargs( skip=skip, -limit=limit, -search=search, -tag_id=tag_id, -group_id=group_id, -is_favorite=is_favorite, -is_archived=is_archived, -stage=stage, -include_deleted=include_deleted, -only_deleted=only_deleted, -ids=ids, - + limit=limit, + search=search, + tag_id=tag_id, + group_id=group_id, + is_favorite=is_favorite, + is_archived=is_archived, + stage=stage, + include_deleted=include_deleted, + only_deleted=only_deleted, + ids=ids, ) response = client.get_httpx_client().request( @@ -221,6 +203,7 @@ def sync_detailed( return _build_response(client=client, response=response) + def sync( *, client: AuthenticatedClient, @@ -235,9 +218,8 @@ def sync( include_deleted: bool | Unset = False, only_deleted: bool | Unset = False, ids: list[UUID] | None | Unset = UNSET, - ) -> ContactsPublic | HTTPValidationError | None: - """ List Contacts + """List Contacts List contacts with filtering. @@ -268,25 +250,24 @@ def sync( Returns: ContactsPublic | HTTPValidationError - """ - + """ return sync_detailed( client=client, -skip=skip, -limit=limit, -search=search, -tag_id=tag_id, -group_id=group_id, -is_favorite=is_favorite, -is_archived=is_archived, -stage=stage, -include_deleted=include_deleted, -only_deleted=only_deleted, -ids=ids, - + skip=skip, + limit=limit, + search=search, + tag_id=tag_id, + group_id=group_id, + is_favorite=is_favorite, + is_archived=is_archived, + stage=stage, + include_deleted=include_deleted, + only_deleted=only_deleted, + ids=ids, ).parsed + async def asyncio_detailed( *, client: AuthenticatedClient, @@ -301,9 +282,8 @@ async def asyncio_detailed( include_deleted: bool | Unset = False, only_deleted: bool | Unset = False, ids: list[UUID] | None | Unset = UNSET, - ) -> Response[ContactsPublic | HTTPValidationError]: - """ List Contacts + """List Contacts List contacts with filtering. @@ -334,30 +314,27 @@ async def asyncio_detailed( Returns: Response[ContactsPublic | HTTPValidationError] - """ - + """ kwargs = _get_kwargs( skip=skip, -limit=limit, -search=search, -tag_id=tag_id, -group_id=group_id, -is_favorite=is_favorite, -is_archived=is_archived, -stage=stage, -include_deleted=include_deleted, -only_deleted=only_deleted, -ids=ids, - + limit=limit, + search=search, + tag_id=tag_id, + group_id=group_id, + is_favorite=is_favorite, + is_archived=is_archived, + stage=stage, + include_deleted=include_deleted, + only_deleted=only_deleted, + ids=ids, ) - response = await client.get_async_httpx_client().request( - **kwargs - ) + response = await client.get_async_httpx_client().request(**kwargs) return _build_response(client=client, response=response) + async def asyncio( *, client: AuthenticatedClient, @@ -372,9 +349,8 @@ async def asyncio( include_deleted: bool | Unset = False, only_deleted: bool | Unset = False, ids: list[UUID] | None | Unset = UNSET, - ) -> ContactsPublic | HTTPValidationError | None: - """ List Contacts + """List Contacts List contacts with filtering. @@ -405,21 +381,21 @@ async def asyncio( Returns: ContactsPublic | HTTPValidationError - """ - - - return (await asyncio_detailed( - client=client, -skip=skip, -limit=limit, -search=search, -tag_id=tag_id, -group_id=group_id, -is_favorite=is_favorite, -is_archived=is_archived, -stage=stage, -include_deleted=include_deleted, -only_deleted=only_deleted, -ids=ids, - - )).parsed + """ + + return ( + await asyncio_detailed( + client=client, + skip=skip, + limit=limit, + search=search, + tag_id=tag_id, + group_id=group_id, + is_favorite=is_favorite, + is_archived=is_archived, + stage=stage, + include_deleted=include_deleted, + only_deleted=only_deleted, + ids=ids, + ) + ).parsed diff --git a/kindred-sdk/personal_crm_client/api/contacts/contacts_list_losing_touch.py b/kindred-sdk/personal_crm_client/api/contacts/contacts_list_losing_touch.py index f5ef3cb4..852d6340 100644 --- a/kindred-sdk/personal_crm_client/api/contacts/contacts_list_losing_touch.py +++ b/kindred-sdk/personal_crm_client/api/contacts/contacts_list_losing_touch.py @@ -1,61 +1,45 @@ from http import HTTPStatus -from typing import Any, cast -from urllib.parse import quote +from typing import Any import httpx -from ...client import AuthenticatedClient, Client -from ...types import Response, UNSET from ... import errors - +from ...client import AuthenticatedClient, Client from ...models.contacts_public import ContactsPublic from ...models.http_validation_error import HTTPValidationError -from ...types import UNSET, Unset -from typing import cast - +from ...types import UNSET, Response, Unset def _get_kwargs( *, limit: int | Unset = 20, - ) -> dict[str, Any]: - - - - params: dict[str, Any] = {} params["limit"] = limit - params = {k: v for k, v in params.items() if v is not UNSET and v is not None} - _kwargs: dict[str, Any] = { "method": "get", "url": "/api/v1/contacts/losing-touch", "params": params, } - return _kwargs - -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> ContactsPublic | HTTPValidationError | None: +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> ContactsPublic | HTTPValidationError | None: if response.status_code == 200: response_200 = ContactsPublic.from_dict(response.json()) - - return response_200 if response.status_code == 422: response_422 = HTTPValidationError.from_dict(response.json()) - - return response_422 if client.raise_on_unexpected_status: @@ -64,7 +48,9 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[ContactsPublic | HTTPValidationError]: +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[ContactsPublic | HTTPValidationError]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -77,9 +63,8 @@ def sync_detailed( *, client: AuthenticatedClient, limit: int | Unset = 20, - ) -> Response[ContactsPublic | HTTPValidationError]: - """ List Losing Touch + """List Losing Touch Return contacts whose cadence has been exceeded. @@ -96,12 +81,10 @@ def sync_detailed( Returns: Response[ContactsPublic | HTTPValidationError] - """ - + """ kwargs = _get_kwargs( limit=limit, - ) response = client.get_httpx_client().request( @@ -110,13 +93,13 @@ def sync_detailed( return _build_response(client=client, response=response) + def sync( *, client: AuthenticatedClient, limit: int | Unset = 20, - ) -> ContactsPublic | HTTPValidationError | None: - """ List Losing Touch + """List Losing Touch Return contacts whose cadence has been exceeded. @@ -133,22 +116,20 @@ def sync( Returns: ContactsPublic | HTTPValidationError - """ - + """ return sync_detailed( client=client, -limit=limit, - + limit=limit, ).parsed + async def asyncio_detailed( *, client: AuthenticatedClient, limit: int | Unset = 20, - ) -> Response[ContactsPublic | HTTPValidationError]: - """ List Losing Touch + """List Losing Touch Return contacts whose cadence has been exceeded. @@ -165,27 +146,23 @@ async def asyncio_detailed( Returns: Response[ContactsPublic | HTTPValidationError] - """ - + """ kwargs = _get_kwargs( limit=limit, - ) - response = await client.get_async_httpx_client().request( - **kwargs - ) + response = await client.get_async_httpx_client().request(**kwargs) return _build_response(client=client, response=response) + async def asyncio( *, client: AuthenticatedClient, limit: int | Unset = 20, - ) -> ContactsPublic | HTTPValidationError | None: - """ List Losing Touch + """List Losing Touch Return contacts whose cadence has been exceeded. @@ -202,11 +179,11 @@ async def asyncio( Returns: ContactsPublic | HTTPValidationError - """ + """ - - return (await asyncio_detailed( - client=client, -limit=limit, - - )).parsed + return ( + await asyncio_detailed( + client=client, + limit=limit, + ) + ).parsed diff --git a/kindred-sdk/personal_crm_client/api/contacts/contacts_restore_contact.py b/kindred-sdk/personal_crm_client/api/contacts/contacts_restore_contact.py index afd1950d..7b7cab34 100644 --- a/kindred-sdk/personal_crm_client/api/contacts/contacts_restore_contact.py +++ b/kindred-sdk/personal_crm_client/api/contacts/contacts_restore_contact.py @@ -1,53 +1,41 @@ from http import HTTPStatus -from typing import Any, cast +from typing import Any from urllib.parse import quote +from uuid import UUID import httpx -from ...client import AuthenticatedClient, Client -from ...types import Response, UNSET from ... import errors - +from ...client import AuthenticatedClient, Client from ...models.contact_public import ContactPublic from ...models.http_validation_error import HTTPValidationError -from typing import cast -from uuid import UUID - +from ...types import Response def _get_kwargs( contact_id: UUID, - ) -> dict[str, Any]: - - - - - - _kwargs: dict[str, Any] = { "method": "post", - "url": "/api/v1/contacts/{contact_id}/restore".format(contact_id=quote(str(contact_id), safe=""),), + "url": "/api/v1/contacts/{contact_id}/restore".format( + contact_id=quote(str(contact_id), safe=""), + ), } - return _kwargs - -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> ContactPublic | HTTPValidationError | None: +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> ContactPublic | HTTPValidationError | None: if response.status_code == 200: response_200 = ContactPublic.from_dict(response.json()) - - return response_200 if response.status_code == 422: response_422 = HTTPValidationError.from_dict(response.json()) - - return response_422 if client.raise_on_unexpected_status: @@ -56,7 +44,9 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[ContactPublic | HTTPValidationError]: +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[ContactPublic | HTTPValidationError]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -69,9 +59,8 @@ def sync_detailed( contact_id: UUID, *, client: AuthenticatedClient, - ) -> Response[ContactPublic | HTTPValidationError]: - """ Restore Contact + """Restore Contact Restore a soft-deleted contact (clear ``deleted_at``). @@ -84,12 +73,10 @@ def sync_detailed( Returns: Response[ContactPublic | HTTPValidationError] - """ - + """ kwargs = _get_kwargs( contact_id=contact_id, - ) response = client.get_httpx_client().request( @@ -98,13 +85,13 @@ def sync_detailed( return _build_response(client=client, response=response) + def sync( contact_id: UUID, *, client: AuthenticatedClient, - ) -> ContactPublic | HTTPValidationError | None: - """ Restore Contact + """Restore Contact Restore a soft-deleted contact (clear ``deleted_at``). @@ -117,22 +104,20 @@ def sync( Returns: ContactPublic | HTTPValidationError - """ - + """ return sync_detailed( contact_id=contact_id, -client=client, - + client=client, ).parsed + async def asyncio_detailed( contact_id: UUID, *, client: AuthenticatedClient, - ) -> Response[ContactPublic | HTTPValidationError]: - """ Restore Contact + """Restore Contact Restore a soft-deleted contact (clear ``deleted_at``). @@ -145,27 +130,23 @@ async def asyncio_detailed( Returns: Response[ContactPublic | HTTPValidationError] - """ - + """ kwargs = _get_kwargs( contact_id=contact_id, - ) - response = await client.get_async_httpx_client().request( - **kwargs - ) + response = await client.get_async_httpx_client().request(**kwargs) return _build_response(client=client, response=response) + async def asyncio( contact_id: UUID, *, client: AuthenticatedClient, - ) -> ContactPublic | HTTPValidationError | None: - """ Restore Contact + """Restore Contact Restore a soft-deleted contact (clear ``deleted_at``). @@ -178,11 +159,11 @@ async def asyncio( Returns: ContactPublic | HTTPValidationError - """ + """ - - return (await asyncio_detailed( - contact_id=contact_id, -client=client, - - )).parsed + return ( + await asyncio_detailed( + contact_id=contact_id, + client=client, + ) + ).parsed diff --git a/kindred-sdk/personal_crm_client/api/contacts/contacts_update_contact.py b/kindred-sdk/personal_crm_client/api/contacts/contacts_update_contact.py index b8f86eb7..e3228021 100644 --- a/kindred-sdk/personal_crm_client/api/contacts/contacts_update_contact.py +++ b/kindred-sdk/personal_crm_client/api/contacts/contacts_update_contact.py @@ -1,62 +1,51 @@ from http import HTTPStatus -from typing import Any, cast +from typing import Any from urllib.parse import quote +from uuid import UUID import httpx -from ...client import AuthenticatedClient, Client -from ...types import Response, UNSET from ... import errors - +from ...client import AuthenticatedClient, Client from ...models.contact_public import ContactPublic from ...models.contact_update import ContactUpdate from ...models.http_validation_error import HTTPValidationError -from typing import cast -from uuid import UUID - +from ...types import Response def _get_kwargs( contact_id: UUID, *, body: ContactUpdate, - ) -> dict[str, Any]: headers: dict[str, Any] = {} - - - - - _kwargs: dict[str, Any] = { "method": "patch", - "url": "/api/v1/contacts/{contact_id}".format(contact_id=quote(str(contact_id), safe=""),), + "url": "/api/v1/contacts/{contact_id}".format( + contact_id=quote(str(contact_id), safe=""), + ), } _kwargs["json"] = body.to_dict() - headers["Content-Type"] = "application/json" _kwargs["headers"] = headers return _kwargs - -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> ContactPublic | HTTPValidationError | None: +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> ContactPublic | HTTPValidationError | None: if response.status_code == 200: response_200 = ContactPublic.from_dict(response.json()) - - return response_200 if response.status_code == 422: response_422 = HTTPValidationError.from_dict(response.json()) - - return response_422 if client.raise_on_unexpected_status: @@ -65,7 +54,9 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[ContactPublic | HTTPValidationError]: +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[ContactPublic | HTTPValidationError]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -79,9 +70,8 @@ def sync_detailed( *, client: AuthenticatedClient, body: ContactUpdate, - ) -> Response[ContactPublic | HTTPValidationError]: - """ Update Contact + """Update Contact Update a contact. @@ -95,13 +85,11 @@ def sync_detailed( Returns: Response[ContactPublic | HTTPValidationError] - """ - + """ kwargs = _get_kwargs( contact_id=contact_id, -body=body, - + body=body, ) response = client.get_httpx_client().request( @@ -110,14 +98,14 @@ def sync_detailed( return _build_response(client=client, response=response) + def sync( contact_id: UUID, *, client: AuthenticatedClient, body: ContactUpdate, - ) -> ContactPublic | HTTPValidationError | None: - """ Update Contact + """Update Contact Update a contact. @@ -131,24 +119,22 @@ def sync( Returns: ContactPublic | HTTPValidationError - """ - + """ return sync_detailed( contact_id=contact_id, -client=client, -body=body, - + client=client, + body=body, ).parsed + async def asyncio_detailed( contact_id: UUID, *, client: AuthenticatedClient, body: ContactUpdate, - ) -> Response[ContactPublic | HTTPValidationError]: - """ Update Contact + """Update Contact Update a contact. @@ -162,29 +148,25 @@ async def asyncio_detailed( Returns: Response[ContactPublic | HTTPValidationError] - """ - + """ kwargs = _get_kwargs( contact_id=contact_id, -body=body, - + body=body, ) - response = await client.get_async_httpx_client().request( - **kwargs - ) + response = await client.get_async_httpx_client().request(**kwargs) return _build_response(client=client, response=response) + async def asyncio( contact_id: UUID, *, client: AuthenticatedClient, body: ContactUpdate, - ) -> ContactPublic | HTTPValidationError | None: - """ Update Contact + """Update Contact Update a contact. @@ -198,12 +180,12 @@ async def asyncio( Returns: ContactPublic | HTTPValidationError - """ - - - return (await asyncio_detailed( - contact_id=contact_id, -client=client, -body=body, - - )).parsed + """ + + return ( + await asyncio_detailed( + contact_id=contact_id, + client=client, + body=body, + ) + ).parsed diff --git a/kindred-sdk/personal_crm_client/api/custom_fields/__init__.py b/kindred-sdk/personal_crm_client/api/custom_fields/__init__.py index c9921b5f..2d7c0b23 100644 --- a/kindred-sdk/personal_crm_client/api/custom_fields/__init__.py +++ b/kindred-sdk/personal_crm_client/api/custom_fields/__init__.py @@ -1 +1 @@ -""" Contains endpoint functions for accessing the API """ +"""Contains endpoint functions for accessing the API""" diff --git a/kindred-sdk/personal_crm_client/api/custom_fields/custom_fields_create_field_definition.py b/kindred-sdk/personal_crm_client/api/custom_fields/custom_fields_create_field_definition.py index e0226a05..61564fc5 100644 --- a/kindred-sdk/personal_crm_client/api/custom_fields/custom_fields_create_field_definition.py +++ b/kindred-sdk/personal_crm_client/api/custom_fields/custom_fields_create_field_definition.py @@ -1,32 +1,22 @@ from http import HTTPStatus -from typing import Any, cast -from urllib.parse import quote +from typing import Any import httpx -from ...client import AuthenticatedClient, Client -from ...types import Response, UNSET from ... import errors - +from ...client import AuthenticatedClient, Client from ...models.custom_field_definition_create import CustomFieldDefinitionCreate from ...models.custom_field_definition_public import CustomFieldDefinitionPublic from ...models.http_validation_error import HTTPValidationError -from typing import cast - +from ...types import Response def _get_kwargs( *, body: CustomFieldDefinitionCreate, - ) -> dict[str, Any]: headers: dict[str, Any] = {} - - - - - _kwargs: dict[str, Any] = { "method": "post", "url": "/api/v1/custom-fields/definitions/", @@ -34,27 +24,23 @@ def _get_kwargs( _kwargs["json"] = body.to_dict() - headers["Content-Type"] = "application/json" _kwargs["headers"] = headers return _kwargs - -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> CustomFieldDefinitionPublic | HTTPValidationError | None: +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> CustomFieldDefinitionPublic | HTTPValidationError | None: if response.status_code == 200: response_200 = CustomFieldDefinitionPublic.from_dict(response.json()) - - return response_200 if response.status_code == 422: response_422 = HTTPValidationError.from_dict(response.json()) - - return response_422 if client.raise_on_unexpected_status: @@ -63,7 +49,9 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[CustomFieldDefinitionPublic | HTTPValidationError]: +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[CustomFieldDefinitionPublic | HTTPValidationError]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -76,9 +64,8 @@ def sync_detailed( *, client: AuthenticatedClient, body: CustomFieldDefinitionCreate, - ) -> Response[CustomFieldDefinitionPublic | HTTPValidationError]: - """ Create Field Definition + """Create Field Definition Create a new custom field definition. @@ -91,12 +78,10 @@ def sync_detailed( Returns: Response[CustomFieldDefinitionPublic | HTTPValidationError] - """ - + """ kwargs = _get_kwargs( body=body, - ) response = client.get_httpx_client().request( @@ -105,13 +90,13 @@ def sync_detailed( return _build_response(client=client, response=response) + def sync( *, client: AuthenticatedClient, body: CustomFieldDefinitionCreate, - ) -> CustomFieldDefinitionPublic | HTTPValidationError | None: - """ Create Field Definition + """Create Field Definition Create a new custom field definition. @@ -124,22 +109,20 @@ def sync( Returns: CustomFieldDefinitionPublic | HTTPValidationError - """ - + """ return sync_detailed( client=client, -body=body, - + body=body, ).parsed + async def asyncio_detailed( *, client: AuthenticatedClient, body: CustomFieldDefinitionCreate, - ) -> Response[CustomFieldDefinitionPublic | HTTPValidationError]: - """ Create Field Definition + """Create Field Definition Create a new custom field definition. @@ -152,27 +135,23 @@ async def asyncio_detailed( Returns: Response[CustomFieldDefinitionPublic | HTTPValidationError] - """ - + """ kwargs = _get_kwargs( body=body, - ) - response = await client.get_async_httpx_client().request( - **kwargs - ) + response = await client.get_async_httpx_client().request(**kwargs) return _build_response(client=client, response=response) + async def asyncio( *, client: AuthenticatedClient, body: CustomFieldDefinitionCreate, - ) -> CustomFieldDefinitionPublic | HTTPValidationError | None: - """ Create Field Definition + """Create Field Definition Create a new custom field definition. @@ -185,11 +164,11 @@ async def asyncio( Returns: CustomFieldDefinitionPublic | HTTPValidationError - """ + """ - - return (await asyncio_detailed( - client=client, -body=body, - - )).parsed + return ( + await asyncio_detailed( + client=client, + body=body, + ) + ).parsed diff --git a/kindred-sdk/personal_crm_client/api/custom_fields/custom_fields_create_field_value.py b/kindred-sdk/personal_crm_client/api/custom_fields/custom_fields_create_field_value.py index 7cc14eb3..1c5ad2e4 100644 --- a/kindred-sdk/personal_crm_client/api/custom_fields/custom_fields_create_field_value.py +++ b/kindred-sdk/personal_crm_client/api/custom_fields/custom_fields_create_field_value.py @@ -1,32 +1,22 @@ from http import HTTPStatus -from typing import Any, cast -from urllib.parse import quote +from typing import Any import httpx -from ...client import AuthenticatedClient, Client -from ...types import Response, UNSET from ... import errors - +from ...client import AuthenticatedClient, Client from ...models.custom_field_value_create import CustomFieldValueCreate from ...models.custom_field_value_public import CustomFieldValuePublic from ...models.http_validation_error import HTTPValidationError -from typing import cast - +from ...types import Response def _get_kwargs( *, body: CustomFieldValueCreate, - ) -> dict[str, Any]: headers: dict[str, Any] = {} - - - - - _kwargs: dict[str, Any] = { "method": "post", "url": "/api/v1/custom-fields/values/", @@ -34,27 +24,23 @@ def _get_kwargs( _kwargs["json"] = body.to_dict() - headers["Content-Type"] = "application/json" _kwargs["headers"] = headers return _kwargs - -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> CustomFieldValuePublic | HTTPValidationError | None: +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> CustomFieldValuePublic | HTTPValidationError | None: if response.status_code == 200: response_200 = CustomFieldValuePublic.from_dict(response.json()) - - return response_200 if response.status_code == 422: response_422 = HTTPValidationError.from_dict(response.json()) - - return response_422 if client.raise_on_unexpected_status: @@ -63,7 +49,9 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[CustomFieldValuePublic | HTTPValidationError]: +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[CustomFieldValuePublic | HTTPValidationError]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -76,9 +64,8 @@ def sync_detailed( *, client: AuthenticatedClient, body: CustomFieldValueCreate, - ) -> Response[CustomFieldValuePublic | HTTPValidationError]: - """ Create Field Value + """Create Field Value Create a custom field value for a contact. @@ -91,12 +78,10 @@ def sync_detailed( Returns: Response[CustomFieldValuePublic | HTTPValidationError] - """ - + """ kwargs = _get_kwargs( body=body, - ) response = client.get_httpx_client().request( @@ -105,13 +90,13 @@ def sync_detailed( return _build_response(client=client, response=response) + def sync( *, client: AuthenticatedClient, body: CustomFieldValueCreate, - ) -> CustomFieldValuePublic | HTTPValidationError | None: - """ Create Field Value + """Create Field Value Create a custom field value for a contact. @@ -124,22 +109,20 @@ def sync( Returns: CustomFieldValuePublic | HTTPValidationError - """ - + """ return sync_detailed( client=client, -body=body, - + body=body, ).parsed + async def asyncio_detailed( *, client: AuthenticatedClient, body: CustomFieldValueCreate, - ) -> Response[CustomFieldValuePublic | HTTPValidationError]: - """ Create Field Value + """Create Field Value Create a custom field value for a contact. @@ -152,27 +135,23 @@ async def asyncio_detailed( Returns: Response[CustomFieldValuePublic | HTTPValidationError] - """ - + """ kwargs = _get_kwargs( body=body, - ) - response = await client.get_async_httpx_client().request( - **kwargs - ) + response = await client.get_async_httpx_client().request(**kwargs) return _build_response(client=client, response=response) + async def asyncio( *, client: AuthenticatedClient, body: CustomFieldValueCreate, - ) -> CustomFieldValuePublic | HTTPValidationError | None: - """ Create Field Value + """Create Field Value Create a custom field value for a contact. @@ -185,11 +164,11 @@ async def asyncio( Returns: CustomFieldValuePublic | HTTPValidationError - """ + """ - - return (await asyncio_detailed( - client=client, -body=body, - - )).parsed + return ( + await asyncio_detailed( + client=client, + body=body, + ) + ).parsed diff --git a/kindred-sdk/personal_crm_client/api/custom_fields/custom_fields_delete_field_definition.py b/kindred-sdk/personal_crm_client/api/custom_fields/custom_fields_delete_field_definition.py index 257f3091..9960c0fd 100644 --- a/kindred-sdk/personal_crm_client/api/custom_fields/custom_fields_delete_field_definition.py +++ b/kindred-sdk/personal_crm_client/api/custom_fields/custom_fields_delete_field_definition.py @@ -1,40 +1,32 @@ from http import HTTPStatus -from typing import Any, cast +from typing import Any from urllib.parse import quote +from uuid import UUID import httpx -from ...client import AuthenticatedClient, Client -from ...types import Response, UNSET from ... import errors - +from ...client import AuthenticatedClient, Client from ...models.http_validation_error import HTTPValidationError -from typing import cast -from uuid import UUID - +from ...types import Response def _get_kwargs( def_id: UUID, - ) -> dict[str, Any]: - - - - - - _kwargs: dict[str, Any] = { "method": "delete", - "url": "/api/v1/custom-fields/definitions/{def_id}".format(def_id=quote(str(def_id), safe=""),), + "url": "/api/v1/custom-fields/definitions/{def_id}".format( + def_id=quote(str(def_id), safe=""), + ), } - return _kwargs - -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Any | HTTPValidationError | None: +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Any | HTTPValidationError | None: if response.status_code == 200: response_200 = response.json() return response_200 @@ -42,8 +34,6 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res if response.status_code == 422: response_422 = HTTPValidationError.from_dict(response.json()) - - return response_422 if client.raise_on_unexpected_status: @@ -52,7 +42,9 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[Any | HTTPValidationError]: +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[Any | HTTPValidationError]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -65,9 +57,8 @@ def sync_detailed( def_id: UUID, *, client: AuthenticatedClient, - ) -> Response[Any | HTTPValidationError]: - """ Delete Field Definition + """Delete Field Definition Delete a custom field definition. @@ -80,12 +71,10 @@ def sync_detailed( Returns: Response[Any | HTTPValidationError] - """ - + """ kwargs = _get_kwargs( def_id=def_id, - ) response = client.get_httpx_client().request( @@ -94,13 +83,13 @@ def sync_detailed( return _build_response(client=client, response=response) + def sync( def_id: UUID, *, client: AuthenticatedClient, - ) -> Any | HTTPValidationError | None: - """ Delete Field Definition + """Delete Field Definition Delete a custom field definition. @@ -113,22 +102,20 @@ def sync( Returns: Any | HTTPValidationError - """ - + """ return sync_detailed( def_id=def_id, -client=client, - + client=client, ).parsed + async def asyncio_detailed( def_id: UUID, *, client: AuthenticatedClient, - ) -> Response[Any | HTTPValidationError]: - """ Delete Field Definition + """Delete Field Definition Delete a custom field definition. @@ -141,27 +128,23 @@ async def asyncio_detailed( Returns: Response[Any | HTTPValidationError] - """ - + """ kwargs = _get_kwargs( def_id=def_id, - ) - response = await client.get_async_httpx_client().request( - **kwargs - ) + response = await client.get_async_httpx_client().request(**kwargs) return _build_response(client=client, response=response) + async def asyncio( def_id: UUID, *, client: AuthenticatedClient, - ) -> Any | HTTPValidationError | None: - """ Delete Field Definition + """Delete Field Definition Delete a custom field definition. @@ -174,11 +157,11 @@ async def asyncio( Returns: Any | HTTPValidationError - """ + """ - - return (await asyncio_detailed( - def_id=def_id, -client=client, - - )).parsed + return ( + await asyncio_detailed( + def_id=def_id, + client=client, + ) + ).parsed diff --git a/kindred-sdk/personal_crm_client/api/custom_fields/custom_fields_delete_field_value.py b/kindred-sdk/personal_crm_client/api/custom_fields/custom_fields_delete_field_value.py index 118afbb6..19116bf2 100644 --- a/kindred-sdk/personal_crm_client/api/custom_fields/custom_fields_delete_field_value.py +++ b/kindred-sdk/personal_crm_client/api/custom_fields/custom_fields_delete_field_value.py @@ -1,40 +1,32 @@ from http import HTTPStatus -from typing import Any, cast +from typing import Any from urllib.parse import quote +from uuid import UUID import httpx -from ...client import AuthenticatedClient, Client -from ...types import Response, UNSET from ... import errors - +from ...client import AuthenticatedClient, Client from ...models.http_validation_error import HTTPValidationError -from typing import cast -from uuid import UUID - +from ...types import Response def _get_kwargs( value_id: UUID, - ) -> dict[str, Any]: - - - - - - _kwargs: dict[str, Any] = { "method": "delete", - "url": "/api/v1/custom-fields/values/{value_id}".format(value_id=quote(str(value_id), safe=""),), + "url": "/api/v1/custom-fields/values/{value_id}".format( + value_id=quote(str(value_id), safe=""), + ), } - return _kwargs - -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Any | HTTPValidationError | None: +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Any | HTTPValidationError | None: if response.status_code == 200: response_200 = response.json() return response_200 @@ -42,8 +34,6 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res if response.status_code == 422: response_422 = HTTPValidationError.from_dict(response.json()) - - return response_422 if client.raise_on_unexpected_status: @@ -52,7 +42,9 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[Any | HTTPValidationError]: +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[Any | HTTPValidationError]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -65,9 +57,8 @@ def sync_detailed( value_id: UUID, *, client: AuthenticatedClient, - ) -> Response[Any | HTTPValidationError]: - """ Delete Field Value + """Delete Field Value Delete a custom field value. @@ -80,12 +71,10 @@ def sync_detailed( Returns: Response[Any | HTTPValidationError] - """ - + """ kwargs = _get_kwargs( value_id=value_id, - ) response = client.get_httpx_client().request( @@ -94,13 +83,13 @@ def sync_detailed( return _build_response(client=client, response=response) + def sync( value_id: UUID, *, client: AuthenticatedClient, - ) -> Any | HTTPValidationError | None: - """ Delete Field Value + """Delete Field Value Delete a custom field value. @@ -113,22 +102,20 @@ def sync( Returns: Any | HTTPValidationError - """ - + """ return sync_detailed( value_id=value_id, -client=client, - + client=client, ).parsed + async def asyncio_detailed( value_id: UUID, *, client: AuthenticatedClient, - ) -> Response[Any | HTTPValidationError]: - """ Delete Field Value + """Delete Field Value Delete a custom field value. @@ -141,27 +128,23 @@ async def asyncio_detailed( Returns: Response[Any | HTTPValidationError] - """ - + """ kwargs = _get_kwargs( value_id=value_id, - ) - response = await client.get_async_httpx_client().request( - **kwargs - ) + response = await client.get_async_httpx_client().request(**kwargs) return _build_response(client=client, response=response) + async def asyncio( value_id: UUID, *, client: AuthenticatedClient, - ) -> Any | HTTPValidationError | None: - """ Delete Field Value + """Delete Field Value Delete a custom field value. @@ -174,11 +157,11 @@ async def asyncio( Returns: Any | HTTPValidationError - """ + """ - - return (await asyncio_detailed( - value_id=value_id, -client=client, - - )).parsed + return ( + await asyncio_detailed( + value_id=value_id, + client=client, + ) + ).parsed diff --git a/kindred-sdk/personal_crm_client/api/custom_fields/custom_fields_list_field_definitions.py b/kindred-sdk/personal_crm_client/api/custom_fields/custom_fields_list_field_definitions.py index 5bf966d9..3ddeaf36 100644 --- a/kindred-sdk/personal_crm_client/api/custom_fields/custom_fields_list_field_definitions.py +++ b/kindred-sdk/personal_crm_client/api/custom_fields/custom_fields_list_field_definitions.py @@ -1,35 +1,22 @@ from http import HTTPStatus -from typing import Any, cast -from urllib.parse import quote +from typing import Any import httpx -from ...client import AuthenticatedClient, Client -from ...types import Response, UNSET from ... import errors +from ...client import AuthenticatedClient, Client +from ...types import Response - - -def _get_kwargs( - -) -> dict[str, Any]: - - - - - - +def _get_kwargs() -> dict[str, Any]: _kwargs: dict[str, Any] = { "method": "get", "url": "/api/v1/custom-fields/definitions/", } - return _kwargs - def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Any | None: if response.status_code == 200: return None @@ -52,9 +39,8 @@ def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Res def sync_detailed( *, client: AuthenticatedClient, - ) -> Response[Any]: - """ List Field Definitions + """List Field Definitions List all custom field definitions for the user. @@ -64,12 +50,9 @@ def sync_detailed( Returns: Response[Any] - """ - + """ - kwargs = _get_kwargs( - - ) + kwargs = _get_kwargs() response = client.get_httpx_client().request( **kwargs, @@ -81,9 +64,8 @@ def sync_detailed( async def asyncio_detailed( *, client: AuthenticatedClient, - ) -> Response[Any]: - """ List Field Definitions + """List Field Definitions List all custom field definitions for the user. @@ -93,16 +75,10 @@ async def asyncio_detailed( Returns: Response[Any] - """ + """ + kwargs = _get_kwargs() - kwargs = _get_kwargs( - - ) - - response = await client.get_async_httpx_client().request( - **kwargs - ) + response = await client.get_async_httpx_client().request(**kwargs) return _build_response(client=client, response=response) - diff --git a/kindred-sdk/personal_crm_client/api/custom_fields/custom_fields_list_field_values.py b/kindred-sdk/personal_crm_client/api/custom_fields/custom_fields_list_field_values.py index 897e5ee8..681779e8 100644 --- a/kindred-sdk/personal_crm_client/api/custom_fields/custom_fields_list_field_values.py +++ b/kindred-sdk/personal_crm_client/api/custom_fields/custom_fields_list_field_values.py @@ -1,40 +1,32 @@ from http import HTTPStatus -from typing import Any, cast +from typing import Any from urllib.parse import quote +from uuid import UUID import httpx -from ...client import AuthenticatedClient, Client -from ...types import Response, UNSET from ... import errors - +from ...client import AuthenticatedClient, Client from ...models.http_validation_error import HTTPValidationError -from typing import cast -from uuid import UUID - +from ...types import Response def _get_kwargs( contact_id: UUID, - ) -> dict[str, Any]: - - - - - - _kwargs: dict[str, Any] = { "method": "get", - "url": "/api/v1/custom-fields/values/contact/{contact_id}".format(contact_id=quote(str(contact_id), safe=""),), + "url": "/api/v1/custom-fields/values/contact/{contact_id}".format( + contact_id=quote(str(contact_id), safe=""), + ), } - return _kwargs - -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Any | HTTPValidationError | None: +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Any | HTTPValidationError | None: if response.status_code == 200: response_200 = response.json() return response_200 @@ -42,8 +34,6 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res if response.status_code == 422: response_422 = HTTPValidationError.from_dict(response.json()) - - return response_422 if client.raise_on_unexpected_status: @@ -52,7 +42,9 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[Any | HTTPValidationError]: +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[Any | HTTPValidationError]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -65,9 +57,8 @@ def sync_detailed( contact_id: UUID, *, client: AuthenticatedClient, - ) -> Response[Any | HTTPValidationError]: - """ List Field Values + """List Field Values List custom field values for a contact. @@ -80,12 +71,10 @@ def sync_detailed( Returns: Response[Any | HTTPValidationError] - """ - + """ kwargs = _get_kwargs( contact_id=contact_id, - ) response = client.get_httpx_client().request( @@ -94,13 +83,13 @@ def sync_detailed( return _build_response(client=client, response=response) + def sync( contact_id: UUID, *, client: AuthenticatedClient, - ) -> Any | HTTPValidationError | None: - """ List Field Values + """List Field Values List custom field values for a contact. @@ -113,22 +102,20 @@ def sync( Returns: Any | HTTPValidationError - """ - + """ return sync_detailed( contact_id=contact_id, -client=client, - + client=client, ).parsed + async def asyncio_detailed( contact_id: UUID, *, client: AuthenticatedClient, - ) -> Response[Any | HTTPValidationError]: - """ List Field Values + """List Field Values List custom field values for a contact. @@ -141,27 +128,23 @@ async def asyncio_detailed( Returns: Response[Any | HTTPValidationError] - """ - + """ kwargs = _get_kwargs( contact_id=contact_id, - ) - response = await client.get_async_httpx_client().request( - **kwargs - ) + response = await client.get_async_httpx_client().request(**kwargs) return _build_response(client=client, response=response) + async def asyncio( contact_id: UUID, *, client: AuthenticatedClient, - ) -> Any | HTTPValidationError | None: - """ List Field Values + """List Field Values List custom field values for a contact. @@ -174,11 +157,11 @@ async def asyncio( Returns: Any | HTTPValidationError - """ + """ - - return (await asyncio_detailed( - contact_id=contact_id, -client=client, - - )).parsed + return ( + await asyncio_detailed( + contact_id=contact_id, + client=client, + ) + ).parsed diff --git a/kindred-sdk/personal_crm_client/api/custom_fields/custom_fields_update_field_definition.py b/kindred-sdk/personal_crm_client/api/custom_fields/custom_fields_update_field_definition.py index acd2b0a0..417896ce 100644 --- a/kindred-sdk/personal_crm_client/api/custom_fields/custom_fields_update_field_definition.py +++ b/kindred-sdk/personal_crm_client/api/custom_fields/custom_fields_update_field_definition.py @@ -1,62 +1,51 @@ from http import HTTPStatus -from typing import Any, cast +from typing import Any from urllib.parse import quote +from uuid import UUID import httpx -from ...client import AuthenticatedClient, Client -from ...types import Response, UNSET from ... import errors - +from ...client import AuthenticatedClient, Client from ...models.custom_field_definition_public import CustomFieldDefinitionPublic from ...models.custom_field_definition_update import CustomFieldDefinitionUpdate from ...models.http_validation_error import HTTPValidationError -from typing import cast -from uuid import UUID - +from ...types import Response def _get_kwargs( def_id: UUID, *, body: CustomFieldDefinitionUpdate, - ) -> dict[str, Any]: headers: dict[str, Any] = {} - - - - - _kwargs: dict[str, Any] = { "method": "patch", - "url": "/api/v1/custom-fields/definitions/{def_id}".format(def_id=quote(str(def_id), safe=""),), + "url": "/api/v1/custom-fields/definitions/{def_id}".format( + def_id=quote(str(def_id), safe=""), + ), } _kwargs["json"] = body.to_dict() - headers["Content-Type"] = "application/json" _kwargs["headers"] = headers return _kwargs - -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> CustomFieldDefinitionPublic | HTTPValidationError | None: +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> CustomFieldDefinitionPublic | HTTPValidationError | None: if response.status_code == 200: response_200 = CustomFieldDefinitionPublic.from_dict(response.json()) - - return response_200 if response.status_code == 422: response_422 = HTTPValidationError.from_dict(response.json()) - - return response_422 if client.raise_on_unexpected_status: @@ -65,7 +54,9 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[CustomFieldDefinitionPublic | HTTPValidationError]: +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[CustomFieldDefinitionPublic | HTTPValidationError]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -79,9 +70,8 @@ def sync_detailed( *, client: AuthenticatedClient, body: CustomFieldDefinitionUpdate, - ) -> Response[CustomFieldDefinitionPublic | HTTPValidationError]: - """ Update Field Definition + """Update Field Definition Update a custom field definition. @@ -95,13 +85,11 @@ def sync_detailed( Returns: Response[CustomFieldDefinitionPublic | HTTPValidationError] - """ - + """ kwargs = _get_kwargs( def_id=def_id, -body=body, - + body=body, ) response = client.get_httpx_client().request( @@ -110,14 +98,14 @@ def sync_detailed( return _build_response(client=client, response=response) + def sync( def_id: UUID, *, client: AuthenticatedClient, body: CustomFieldDefinitionUpdate, - ) -> CustomFieldDefinitionPublic | HTTPValidationError | None: - """ Update Field Definition + """Update Field Definition Update a custom field definition. @@ -131,24 +119,22 @@ def sync( Returns: CustomFieldDefinitionPublic | HTTPValidationError - """ - + """ return sync_detailed( def_id=def_id, -client=client, -body=body, - + client=client, + body=body, ).parsed + async def asyncio_detailed( def_id: UUID, *, client: AuthenticatedClient, body: CustomFieldDefinitionUpdate, - ) -> Response[CustomFieldDefinitionPublic | HTTPValidationError]: - """ Update Field Definition + """Update Field Definition Update a custom field definition. @@ -162,29 +148,25 @@ async def asyncio_detailed( Returns: Response[CustomFieldDefinitionPublic | HTTPValidationError] - """ - + """ kwargs = _get_kwargs( def_id=def_id, -body=body, - + body=body, ) - response = await client.get_async_httpx_client().request( - **kwargs - ) + response = await client.get_async_httpx_client().request(**kwargs) return _build_response(client=client, response=response) + async def asyncio( def_id: UUID, *, client: AuthenticatedClient, body: CustomFieldDefinitionUpdate, - ) -> CustomFieldDefinitionPublic | HTTPValidationError | None: - """ Update Field Definition + """Update Field Definition Update a custom field definition. @@ -198,12 +180,12 @@ async def asyncio( Returns: CustomFieldDefinitionPublic | HTTPValidationError - """ - - - return (await asyncio_detailed( - def_id=def_id, -client=client, -body=body, - - )).parsed + """ + + return ( + await asyncio_detailed( + def_id=def_id, + client=client, + body=body, + ) + ).parsed diff --git a/kindred-sdk/personal_crm_client/api/custom_fields/custom_fields_update_field_value.py b/kindred-sdk/personal_crm_client/api/custom_fields/custom_fields_update_field_value.py index e2303caa..3403fa9a 100644 --- a/kindred-sdk/personal_crm_client/api/custom_fields/custom_fields_update_field_value.py +++ b/kindred-sdk/personal_crm_client/api/custom_fields/custom_fields_update_field_value.py @@ -1,62 +1,51 @@ from http import HTTPStatus -from typing import Any, cast +from typing import Any from urllib.parse import quote +from uuid import UUID import httpx -from ...client import AuthenticatedClient, Client -from ...types import Response, UNSET from ... import errors - +from ...client import AuthenticatedClient, Client from ...models.custom_field_value_public import CustomFieldValuePublic from ...models.custom_field_value_update import CustomFieldValueUpdate from ...models.http_validation_error import HTTPValidationError -from typing import cast -from uuid import UUID - +from ...types import Response def _get_kwargs( value_id: UUID, *, body: CustomFieldValueUpdate, - ) -> dict[str, Any]: headers: dict[str, Any] = {} - - - - - _kwargs: dict[str, Any] = { "method": "patch", - "url": "/api/v1/custom-fields/values/{value_id}".format(value_id=quote(str(value_id), safe=""),), + "url": "/api/v1/custom-fields/values/{value_id}".format( + value_id=quote(str(value_id), safe=""), + ), } _kwargs["json"] = body.to_dict() - headers["Content-Type"] = "application/json" _kwargs["headers"] = headers return _kwargs - -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> CustomFieldValuePublic | HTTPValidationError | None: +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> CustomFieldValuePublic | HTTPValidationError | None: if response.status_code == 200: response_200 = CustomFieldValuePublic.from_dict(response.json()) - - return response_200 if response.status_code == 422: response_422 = HTTPValidationError.from_dict(response.json()) - - return response_422 if client.raise_on_unexpected_status: @@ -65,7 +54,9 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[CustomFieldValuePublic | HTTPValidationError]: +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[CustomFieldValuePublic | HTTPValidationError]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -79,9 +70,8 @@ def sync_detailed( *, client: AuthenticatedClient, body: CustomFieldValueUpdate, - ) -> Response[CustomFieldValuePublic | HTTPValidationError]: - """ Update Field Value + """Update Field Value Update a custom field value. @@ -95,13 +85,11 @@ def sync_detailed( Returns: Response[CustomFieldValuePublic | HTTPValidationError] - """ - + """ kwargs = _get_kwargs( value_id=value_id, -body=body, - + body=body, ) response = client.get_httpx_client().request( @@ -110,14 +98,14 @@ def sync_detailed( return _build_response(client=client, response=response) + def sync( value_id: UUID, *, client: AuthenticatedClient, body: CustomFieldValueUpdate, - ) -> CustomFieldValuePublic | HTTPValidationError | None: - """ Update Field Value + """Update Field Value Update a custom field value. @@ -131,24 +119,22 @@ def sync( Returns: CustomFieldValuePublic | HTTPValidationError - """ - + """ return sync_detailed( value_id=value_id, -client=client, -body=body, - + client=client, + body=body, ).parsed + async def asyncio_detailed( value_id: UUID, *, client: AuthenticatedClient, body: CustomFieldValueUpdate, - ) -> Response[CustomFieldValuePublic | HTTPValidationError]: - """ Update Field Value + """Update Field Value Update a custom field value. @@ -162,29 +148,25 @@ async def asyncio_detailed( Returns: Response[CustomFieldValuePublic | HTTPValidationError] - """ - + """ kwargs = _get_kwargs( value_id=value_id, -body=body, - + body=body, ) - response = await client.get_async_httpx_client().request( - **kwargs - ) + response = await client.get_async_httpx_client().request(**kwargs) return _build_response(client=client, response=response) + async def asyncio( value_id: UUID, *, client: AuthenticatedClient, body: CustomFieldValueUpdate, - ) -> CustomFieldValuePublic | HTTPValidationError | None: - """ Update Field Value + """Update Field Value Update a custom field value. @@ -198,12 +180,12 @@ async def asyncio( Returns: CustomFieldValuePublic | HTTPValidationError - """ - - - return (await asyncio_detailed( - value_id=value_id, -client=client, -body=body, - - )).parsed + """ + + return ( + await asyncio_detailed( + value_id=value_id, + client=client, + body=body, + ) + ).parsed diff --git a/kindred-sdk/personal_crm_client/api/debts/__init__.py b/kindred-sdk/personal_crm_client/api/debts/__init__.py index c9921b5f..2d7c0b23 100644 --- a/kindred-sdk/personal_crm_client/api/debts/__init__.py +++ b/kindred-sdk/personal_crm_client/api/debts/__init__.py @@ -1 +1 @@ -""" Contains endpoint functions for accessing the API """ +"""Contains endpoint functions for accessing the API""" diff --git a/kindred-sdk/personal_crm_client/api/debts/debts_create_debt_route.py b/kindred-sdk/personal_crm_client/api/debts/debts_create_debt_route.py index 8df101dd..39c29040 100644 --- a/kindred-sdk/personal_crm_client/api/debts/debts_create_debt_route.py +++ b/kindred-sdk/personal_crm_client/api/debts/debts_create_debt_route.py @@ -1,32 +1,22 @@ from http import HTTPStatus -from typing import Any, cast -from urllib.parse import quote +from typing import Any import httpx -from ...client import AuthenticatedClient, Client -from ...types import Response, UNSET from ... import errors - +from ...client import AuthenticatedClient, Client from ...models.debt_create import DebtCreate from ...models.debt_public import DebtPublic from ...models.http_validation_error import HTTPValidationError -from typing import cast - +from ...types import Response def _get_kwargs( *, body: DebtCreate, - ) -> dict[str, Any]: headers: dict[str, Any] = {} - - - - - _kwargs: dict[str, Any] = { "method": "post", "url": "/api/v1/debts/", @@ -34,27 +24,23 @@ def _get_kwargs( _kwargs["json"] = body.to_dict() - headers["Content-Type"] = "application/json" _kwargs["headers"] = headers return _kwargs - -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> DebtPublic | HTTPValidationError | None: +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> DebtPublic | HTTPValidationError | None: if response.status_code == 200: response_200 = DebtPublic.from_dict(response.json()) - - return response_200 if response.status_code == 422: response_422 = HTTPValidationError.from_dict(response.json()) - - return response_422 if client.raise_on_unexpected_status: @@ -63,7 +49,9 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[DebtPublic | HTTPValidationError]: +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[DebtPublic | HTTPValidationError]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -76,9 +64,8 @@ def sync_detailed( *, client: AuthenticatedClient, body: DebtCreate, - ) -> Response[DebtPublic | HTTPValidationError]: - """ Create Debt Route + """Create Debt Route Create a new debt. @@ -91,12 +78,10 @@ def sync_detailed( Returns: Response[DebtPublic | HTTPValidationError] - """ - + """ kwargs = _get_kwargs( body=body, - ) response = client.get_httpx_client().request( @@ -105,13 +90,13 @@ def sync_detailed( return _build_response(client=client, response=response) + def sync( *, client: AuthenticatedClient, body: DebtCreate, - ) -> DebtPublic | HTTPValidationError | None: - """ Create Debt Route + """Create Debt Route Create a new debt. @@ -124,22 +109,20 @@ def sync( Returns: DebtPublic | HTTPValidationError - """ - + """ return sync_detailed( client=client, -body=body, - + body=body, ).parsed + async def asyncio_detailed( *, client: AuthenticatedClient, body: DebtCreate, - ) -> Response[DebtPublic | HTTPValidationError]: - """ Create Debt Route + """Create Debt Route Create a new debt. @@ -152,27 +135,23 @@ async def asyncio_detailed( Returns: Response[DebtPublic | HTTPValidationError] - """ - + """ kwargs = _get_kwargs( body=body, - ) - response = await client.get_async_httpx_client().request( - **kwargs - ) + response = await client.get_async_httpx_client().request(**kwargs) return _build_response(client=client, response=response) + async def asyncio( *, client: AuthenticatedClient, body: DebtCreate, - ) -> DebtPublic | HTTPValidationError | None: - """ Create Debt Route + """Create Debt Route Create a new debt. @@ -185,11 +164,11 @@ async def asyncio( Returns: DebtPublic | HTTPValidationError - """ + """ - - return (await asyncio_detailed( - client=client, -body=body, - - )).parsed + return ( + await asyncio_detailed( + client=client, + body=body, + ) + ).parsed diff --git a/kindred-sdk/personal_crm_client/api/debts/debts_delete_debt.py b/kindred-sdk/personal_crm_client/api/debts/debts_delete_debt.py index 1351f101..a8eed099 100644 --- a/kindred-sdk/personal_crm_client/api/debts/debts_delete_debt.py +++ b/kindred-sdk/personal_crm_client/api/debts/debts_delete_debt.py @@ -1,40 +1,32 @@ from http import HTTPStatus -from typing import Any, cast +from typing import Any from urllib.parse import quote +from uuid import UUID import httpx -from ...client import AuthenticatedClient, Client -from ...types import Response, UNSET from ... import errors - +from ...client import AuthenticatedClient, Client from ...models.http_validation_error import HTTPValidationError -from typing import cast -from uuid import UUID - +from ...types import Response def _get_kwargs( debt_id: UUID, - ) -> dict[str, Any]: - - - - - - _kwargs: dict[str, Any] = { "method": "delete", - "url": "/api/v1/debts/{debt_id}".format(debt_id=quote(str(debt_id), safe=""),), + "url": "/api/v1/debts/{debt_id}".format( + debt_id=quote(str(debt_id), safe=""), + ), } - return _kwargs - -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Any | HTTPValidationError | None: +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Any | HTTPValidationError | None: if response.status_code == 200: response_200 = response.json() return response_200 @@ -42,8 +34,6 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res if response.status_code == 422: response_422 = HTTPValidationError.from_dict(response.json()) - - return response_422 if client.raise_on_unexpected_status: @@ -52,7 +42,9 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[Any | HTTPValidationError]: +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[Any | HTTPValidationError]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -65,9 +57,8 @@ def sync_detailed( debt_id: UUID, *, client: AuthenticatedClient, - ) -> Response[Any | HTTPValidationError]: - """ Delete Debt + """Delete Debt Delete a debt. @@ -80,12 +71,10 @@ def sync_detailed( Returns: Response[Any | HTTPValidationError] - """ - + """ kwargs = _get_kwargs( debt_id=debt_id, - ) response = client.get_httpx_client().request( @@ -94,13 +83,13 @@ def sync_detailed( return _build_response(client=client, response=response) + def sync( debt_id: UUID, *, client: AuthenticatedClient, - ) -> Any | HTTPValidationError | None: - """ Delete Debt + """Delete Debt Delete a debt. @@ -113,22 +102,20 @@ def sync( Returns: Any | HTTPValidationError - """ - + """ return sync_detailed( debt_id=debt_id, -client=client, - + client=client, ).parsed + async def asyncio_detailed( debt_id: UUID, *, client: AuthenticatedClient, - ) -> Response[Any | HTTPValidationError]: - """ Delete Debt + """Delete Debt Delete a debt. @@ -141,27 +128,23 @@ async def asyncio_detailed( Returns: Response[Any | HTTPValidationError] - """ - + """ kwargs = _get_kwargs( debt_id=debt_id, - ) - response = await client.get_async_httpx_client().request( - **kwargs - ) + response = await client.get_async_httpx_client().request(**kwargs) return _build_response(client=client, response=response) + async def asyncio( debt_id: UUID, *, client: AuthenticatedClient, - ) -> Any | HTTPValidationError | None: - """ Delete Debt + """Delete Debt Delete a debt. @@ -174,11 +157,11 @@ async def asyncio( Returns: Any | HTTPValidationError - """ + """ - - return (await asyncio_detailed( - debt_id=debt_id, -client=client, - - )).parsed + return ( + await asyncio_detailed( + debt_id=debt_id, + client=client, + ) + ).parsed diff --git a/kindred-sdk/personal_crm_client/api/debts/debts_list_debts.py b/kindred-sdk/personal_crm_client/api/debts/debts_list_debts.py index b6e6d620..6dae1249 100644 --- a/kindred-sdk/personal_crm_client/api/debts/debts_list_debts.py +++ b/kindred-sdk/personal_crm_client/api/debts/debts_list_debts.py @@ -1,53 +1,41 @@ from http import HTTPStatus -from typing import Any, cast +from typing import Any from urllib.parse import quote +from uuid import UUID import httpx -from ...client import AuthenticatedClient, Client -from ...types import Response, UNSET from ... import errors - +from ...client import AuthenticatedClient, Client from ...models.debts_public import DebtsPublic from ...models.http_validation_error import HTTPValidationError -from typing import cast -from uuid import UUID - +from ...types import Response def _get_kwargs( contact_id: UUID, - ) -> dict[str, Any]: - - - - - - _kwargs: dict[str, Any] = { "method": "get", - "url": "/api/v1/debts/contact/{contact_id}".format(contact_id=quote(str(contact_id), safe=""),), + "url": "/api/v1/debts/contact/{contact_id}".format( + contact_id=quote(str(contact_id), safe=""), + ), } - return _kwargs - -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> DebtsPublic | HTTPValidationError | None: +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> DebtsPublic | HTTPValidationError | None: if response.status_code == 200: response_200 = DebtsPublic.from_dict(response.json()) - - return response_200 if response.status_code == 422: response_422 = HTTPValidationError.from_dict(response.json()) - - return response_422 if client.raise_on_unexpected_status: @@ -56,7 +44,9 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[DebtsPublic | HTTPValidationError]: +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[DebtsPublic | HTTPValidationError]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -69,9 +59,8 @@ def sync_detailed( contact_id: UUID, *, client: AuthenticatedClient, - ) -> Response[DebtsPublic | HTTPValidationError]: - """ List Debts + """List Debts List debts for a contact. @@ -84,12 +73,10 @@ def sync_detailed( Returns: Response[DebtsPublic | HTTPValidationError] - """ - + """ kwargs = _get_kwargs( contact_id=contact_id, - ) response = client.get_httpx_client().request( @@ -98,13 +85,13 @@ def sync_detailed( return _build_response(client=client, response=response) + def sync( contact_id: UUID, *, client: AuthenticatedClient, - ) -> DebtsPublic | HTTPValidationError | None: - """ List Debts + """List Debts List debts for a contact. @@ -117,22 +104,20 @@ def sync( Returns: DebtsPublic | HTTPValidationError - """ - + """ return sync_detailed( contact_id=contact_id, -client=client, - + client=client, ).parsed + async def asyncio_detailed( contact_id: UUID, *, client: AuthenticatedClient, - ) -> Response[DebtsPublic | HTTPValidationError]: - """ List Debts + """List Debts List debts for a contact. @@ -145,27 +130,23 @@ async def asyncio_detailed( Returns: Response[DebtsPublic | HTTPValidationError] - """ - + """ kwargs = _get_kwargs( contact_id=contact_id, - ) - response = await client.get_async_httpx_client().request( - **kwargs - ) + response = await client.get_async_httpx_client().request(**kwargs) return _build_response(client=client, response=response) + async def asyncio( contact_id: UUID, *, client: AuthenticatedClient, - ) -> DebtsPublic | HTTPValidationError | None: - """ List Debts + """List Debts List debts for a contact. @@ -178,11 +159,11 @@ async def asyncio( Returns: DebtsPublic | HTTPValidationError - """ + """ - - return (await asyncio_detailed( - contact_id=contact_id, -client=client, - - )).parsed + return ( + await asyncio_detailed( + contact_id=contact_id, + client=client, + ) + ).parsed diff --git a/kindred-sdk/personal_crm_client/api/debts/debts_update_debt.py b/kindred-sdk/personal_crm_client/api/debts/debts_update_debt.py index 80d6ac04..7158e863 100644 --- a/kindred-sdk/personal_crm_client/api/debts/debts_update_debt.py +++ b/kindred-sdk/personal_crm_client/api/debts/debts_update_debt.py @@ -1,62 +1,51 @@ from http import HTTPStatus -from typing import Any, cast +from typing import Any from urllib.parse import quote +from uuid import UUID import httpx -from ...client import AuthenticatedClient, Client -from ...types import Response, UNSET from ... import errors - +from ...client import AuthenticatedClient, Client from ...models.debt_public import DebtPublic from ...models.debt_update import DebtUpdate from ...models.http_validation_error import HTTPValidationError -from typing import cast -from uuid import UUID - +from ...types import Response def _get_kwargs( debt_id: UUID, *, body: DebtUpdate, - ) -> dict[str, Any]: headers: dict[str, Any] = {} - - - - - _kwargs: dict[str, Any] = { "method": "patch", - "url": "/api/v1/debts/{debt_id}".format(debt_id=quote(str(debt_id), safe=""),), + "url": "/api/v1/debts/{debt_id}".format( + debt_id=quote(str(debt_id), safe=""), + ), } _kwargs["json"] = body.to_dict() - headers["Content-Type"] = "application/json" _kwargs["headers"] = headers return _kwargs - -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> DebtPublic | HTTPValidationError | None: +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> DebtPublic | HTTPValidationError | None: if response.status_code == 200: response_200 = DebtPublic.from_dict(response.json()) - - return response_200 if response.status_code == 422: response_422 = HTTPValidationError.from_dict(response.json()) - - return response_422 if client.raise_on_unexpected_status: @@ -65,7 +54,9 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[DebtPublic | HTTPValidationError]: +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[DebtPublic | HTTPValidationError]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -79,9 +70,8 @@ def sync_detailed( *, client: AuthenticatedClient, body: DebtUpdate, - ) -> Response[DebtPublic | HTTPValidationError]: - """ Update Debt + """Update Debt Update a debt. @@ -95,13 +85,11 @@ def sync_detailed( Returns: Response[DebtPublic | HTTPValidationError] - """ - + """ kwargs = _get_kwargs( debt_id=debt_id, -body=body, - + body=body, ) response = client.get_httpx_client().request( @@ -110,14 +98,14 @@ def sync_detailed( return _build_response(client=client, response=response) + def sync( debt_id: UUID, *, client: AuthenticatedClient, body: DebtUpdate, - ) -> DebtPublic | HTTPValidationError | None: - """ Update Debt + """Update Debt Update a debt. @@ -131,24 +119,22 @@ def sync( Returns: DebtPublic | HTTPValidationError - """ - + """ return sync_detailed( debt_id=debt_id, -client=client, -body=body, - + client=client, + body=body, ).parsed + async def asyncio_detailed( debt_id: UUID, *, client: AuthenticatedClient, body: DebtUpdate, - ) -> Response[DebtPublic | HTTPValidationError]: - """ Update Debt + """Update Debt Update a debt. @@ -162,29 +148,25 @@ async def asyncio_detailed( Returns: Response[DebtPublic | HTTPValidationError] - """ - + """ kwargs = _get_kwargs( debt_id=debt_id, -body=body, - + body=body, ) - response = await client.get_async_httpx_client().request( - **kwargs - ) + response = await client.get_async_httpx_client().request(**kwargs) return _build_response(client=client, response=response) + async def asyncio( debt_id: UUID, *, client: AuthenticatedClient, body: DebtUpdate, - ) -> DebtPublic | HTTPValidationError | None: - """ Update Debt + """Update Debt Update a debt. @@ -198,12 +180,12 @@ async def asyncio( Returns: DebtPublic | HTTPValidationError - """ - - - return (await asyncio_detailed( - debt_id=debt_id, -client=client, -body=body, - - )).parsed + """ + + return ( + await asyncio_detailed( + debt_id=debt_id, + client=client, + body=body, + ) + ).parsed diff --git a/kindred-sdk/personal_crm_client/api/gifts/__init__.py b/kindred-sdk/personal_crm_client/api/gifts/__init__.py index c9921b5f..2d7c0b23 100644 --- a/kindred-sdk/personal_crm_client/api/gifts/__init__.py +++ b/kindred-sdk/personal_crm_client/api/gifts/__init__.py @@ -1 +1 @@ -""" Contains endpoint functions for accessing the API """ +"""Contains endpoint functions for accessing the API""" diff --git a/kindred-sdk/personal_crm_client/api/gifts/gifts_create_gift_route.py b/kindred-sdk/personal_crm_client/api/gifts/gifts_create_gift_route.py index bec67455..e5f8a6f8 100644 --- a/kindred-sdk/personal_crm_client/api/gifts/gifts_create_gift_route.py +++ b/kindred-sdk/personal_crm_client/api/gifts/gifts_create_gift_route.py @@ -1,32 +1,22 @@ from http import HTTPStatus -from typing import Any, cast -from urllib.parse import quote +from typing import Any import httpx -from ...client import AuthenticatedClient, Client -from ...types import Response, UNSET from ... import errors - +from ...client import AuthenticatedClient, Client from ...models.gift_create import GiftCreate from ...models.gift_public import GiftPublic from ...models.http_validation_error import HTTPValidationError -from typing import cast - +from ...types import Response def _get_kwargs( *, body: GiftCreate, - ) -> dict[str, Any]: headers: dict[str, Any] = {} - - - - - _kwargs: dict[str, Any] = { "method": "post", "url": "/api/v1/gifts/", @@ -34,27 +24,23 @@ def _get_kwargs( _kwargs["json"] = body.to_dict() - headers["Content-Type"] = "application/json" _kwargs["headers"] = headers return _kwargs - -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> GiftPublic | HTTPValidationError | None: +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> GiftPublic | HTTPValidationError | None: if response.status_code == 200: response_200 = GiftPublic.from_dict(response.json()) - - return response_200 if response.status_code == 422: response_422 = HTTPValidationError.from_dict(response.json()) - - return response_422 if client.raise_on_unexpected_status: @@ -63,7 +49,9 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[GiftPublic | HTTPValidationError]: +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[GiftPublic | HTTPValidationError]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -76,9 +64,8 @@ def sync_detailed( *, client: AuthenticatedClient, body: GiftCreate, - ) -> Response[GiftPublic | HTTPValidationError]: - """ Create Gift Route + """Create Gift Route Create a new gift. @@ -91,12 +78,10 @@ def sync_detailed( Returns: Response[GiftPublic | HTTPValidationError] - """ - + """ kwargs = _get_kwargs( body=body, - ) response = client.get_httpx_client().request( @@ -105,13 +90,13 @@ def sync_detailed( return _build_response(client=client, response=response) + def sync( *, client: AuthenticatedClient, body: GiftCreate, - ) -> GiftPublic | HTTPValidationError | None: - """ Create Gift Route + """Create Gift Route Create a new gift. @@ -124,22 +109,20 @@ def sync( Returns: GiftPublic | HTTPValidationError - """ - + """ return sync_detailed( client=client, -body=body, - + body=body, ).parsed + async def asyncio_detailed( *, client: AuthenticatedClient, body: GiftCreate, - ) -> Response[GiftPublic | HTTPValidationError]: - """ Create Gift Route + """Create Gift Route Create a new gift. @@ -152,27 +135,23 @@ async def asyncio_detailed( Returns: Response[GiftPublic | HTTPValidationError] - """ - + """ kwargs = _get_kwargs( body=body, - ) - response = await client.get_async_httpx_client().request( - **kwargs - ) + response = await client.get_async_httpx_client().request(**kwargs) return _build_response(client=client, response=response) + async def asyncio( *, client: AuthenticatedClient, body: GiftCreate, - ) -> GiftPublic | HTTPValidationError | None: - """ Create Gift Route + """Create Gift Route Create a new gift. @@ -185,11 +164,11 @@ async def asyncio( Returns: GiftPublic | HTTPValidationError - """ + """ - - return (await asyncio_detailed( - client=client, -body=body, - - )).parsed + return ( + await asyncio_detailed( + client=client, + body=body, + ) + ).parsed diff --git a/kindred-sdk/personal_crm_client/api/gifts/gifts_delete_gift.py b/kindred-sdk/personal_crm_client/api/gifts/gifts_delete_gift.py index 09895b53..37a09d74 100644 --- a/kindred-sdk/personal_crm_client/api/gifts/gifts_delete_gift.py +++ b/kindred-sdk/personal_crm_client/api/gifts/gifts_delete_gift.py @@ -1,40 +1,32 @@ from http import HTTPStatus -from typing import Any, cast +from typing import Any from urllib.parse import quote +from uuid import UUID import httpx -from ...client import AuthenticatedClient, Client -from ...types import Response, UNSET from ... import errors - +from ...client import AuthenticatedClient, Client from ...models.http_validation_error import HTTPValidationError -from typing import cast -from uuid import UUID - +from ...types import Response def _get_kwargs( gift_id: UUID, - ) -> dict[str, Any]: - - - - - - _kwargs: dict[str, Any] = { "method": "delete", - "url": "/api/v1/gifts/{gift_id}".format(gift_id=quote(str(gift_id), safe=""),), + "url": "/api/v1/gifts/{gift_id}".format( + gift_id=quote(str(gift_id), safe=""), + ), } - return _kwargs - -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Any | HTTPValidationError | None: +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Any | HTTPValidationError | None: if response.status_code == 200: response_200 = response.json() return response_200 @@ -42,8 +34,6 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res if response.status_code == 422: response_422 = HTTPValidationError.from_dict(response.json()) - - return response_422 if client.raise_on_unexpected_status: @@ -52,7 +42,9 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[Any | HTTPValidationError]: +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[Any | HTTPValidationError]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -65,9 +57,8 @@ def sync_detailed( gift_id: UUID, *, client: AuthenticatedClient, - ) -> Response[Any | HTTPValidationError]: - """ Delete Gift + """Delete Gift Delete a gift. @@ -80,12 +71,10 @@ def sync_detailed( Returns: Response[Any | HTTPValidationError] - """ - + """ kwargs = _get_kwargs( gift_id=gift_id, - ) response = client.get_httpx_client().request( @@ -94,13 +83,13 @@ def sync_detailed( return _build_response(client=client, response=response) + def sync( gift_id: UUID, *, client: AuthenticatedClient, - ) -> Any | HTTPValidationError | None: - """ Delete Gift + """Delete Gift Delete a gift. @@ -113,22 +102,20 @@ def sync( Returns: Any | HTTPValidationError - """ - + """ return sync_detailed( gift_id=gift_id, -client=client, - + client=client, ).parsed + async def asyncio_detailed( gift_id: UUID, *, client: AuthenticatedClient, - ) -> Response[Any | HTTPValidationError]: - """ Delete Gift + """Delete Gift Delete a gift. @@ -141,27 +128,23 @@ async def asyncio_detailed( Returns: Response[Any | HTTPValidationError] - """ - + """ kwargs = _get_kwargs( gift_id=gift_id, - ) - response = await client.get_async_httpx_client().request( - **kwargs - ) + response = await client.get_async_httpx_client().request(**kwargs) return _build_response(client=client, response=response) + async def asyncio( gift_id: UUID, *, client: AuthenticatedClient, - ) -> Any | HTTPValidationError | None: - """ Delete Gift + """Delete Gift Delete a gift. @@ -174,11 +157,11 @@ async def asyncio( Returns: Any | HTTPValidationError - """ + """ - - return (await asyncio_detailed( - gift_id=gift_id, -client=client, - - )).parsed + return ( + await asyncio_detailed( + gift_id=gift_id, + client=client, + ) + ).parsed diff --git a/kindred-sdk/personal_crm_client/api/gifts/gifts_list_gifts.py b/kindred-sdk/personal_crm_client/api/gifts/gifts_list_gifts.py index 2220f072..554b8051 100644 --- a/kindred-sdk/personal_crm_client/api/gifts/gifts_list_gifts.py +++ b/kindred-sdk/personal_crm_client/api/gifts/gifts_list_gifts.py @@ -1,53 +1,41 @@ from http import HTTPStatus -from typing import Any, cast +from typing import Any from urllib.parse import quote +from uuid import UUID import httpx -from ...client import AuthenticatedClient, Client -from ...types import Response, UNSET from ... import errors - +from ...client import AuthenticatedClient, Client from ...models.gifts_public import GiftsPublic from ...models.http_validation_error import HTTPValidationError -from typing import cast -from uuid import UUID - +from ...types import Response def _get_kwargs( contact_id: UUID, - ) -> dict[str, Any]: - - - - - - _kwargs: dict[str, Any] = { "method": "get", - "url": "/api/v1/gifts/contact/{contact_id}".format(contact_id=quote(str(contact_id), safe=""),), + "url": "/api/v1/gifts/contact/{contact_id}".format( + contact_id=quote(str(contact_id), safe=""), + ), } - return _kwargs - -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> GiftsPublic | HTTPValidationError | None: +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> GiftsPublic | HTTPValidationError | None: if response.status_code == 200: response_200 = GiftsPublic.from_dict(response.json()) - - return response_200 if response.status_code == 422: response_422 = HTTPValidationError.from_dict(response.json()) - - return response_422 if client.raise_on_unexpected_status: @@ -56,7 +44,9 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[GiftsPublic | HTTPValidationError]: +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[GiftsPublic | HTTPValidationError]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -69,9 +59,8 @@ def sync_detailed( contact_id: UUID, *, client: AuthenticatedClient, - ) -> Response[GiftsPublic | HTTPValidationError]: - """ List Gifts + """List Gifts List gifts for a contact. @@ -84,12 +73,10 @@ def sync_detailed( Returns: Response[GiftsPublic | HTTPValidationError] - """ - + """ kwargs = _get_kwargs( contact_id=contact_id, - ) response = client.get_httpx_client().request( @@ -98,13 +85,13 @@ def sync_detailed( return _build_response(client=client, response=response) + def sync( contact_id: UUID, *, client: AuthenticatedClient, - ) -> GiftsPublic | HTTPValidationError | None: - """ List Gifts + """List Gifts List gifts for a contact. @@ -117,22 +104,20 @@ def sync( Returns: GiftsPublic | HTTPValidationError - """ - + """ return sync_detailed( contact_id=contact_id, -client=client, - + client=client, ).parsed + async def asyncio_detailed( contact_id: UUID, *, client: AuthenticatedClient, - ) -> Response[GiftsPublic | HTTPValidationError]: - """ List Gifts + """List Gifts List gifts for a contact. @@ -145,27 +130,23 @@ async def asyncio_detailed( Returns: Response[GiftsPublic | HTTPValidationError] - """ - + """ kwargs = _get_kwargs( contact_id=contact_id, - ) - response = await client.get_async_httpx_client().request( - **kwargs - ) + response = await client.get_async_httpx_client().request(**kwargs) return _build_response(client=client, response=response) + async def asyncio( contact_id: UUID, *, client: AuthenticatedClient, - ) -> GiftsPublic | HTTPValidationError | None: - """ List Gifts + """List Gifts List gifts for a contact. @@ -178,11 +159,11 @@ async def asyncio( Returns: GiftsPublic | HTTPValidationError - """ + """ - - return (await asyncio_detailed( - contact_id=contact_id, -client=client, - - )).parsed + return ( + await asyncio_detailed( + contact_id=contact_id, + client=client, + ) + ).parsed diff --git a/kindred-sdk/personal_crm_client/api/gifts/gifts_update_gift.py b/kindred-sdk/personal_crm_client/api/gifts/gifts_update_gift.py index 3263cefa..17720f3e 100644 --- a/kindred-sdk/personal_crm_client/api/gifts/gifts_update_gift.py +++ b/kindred-sdk/personal_crm_client/api/gifts/gifts_update_gift.py @@ -1,62 +1,51 @@ from http import HTTPStatus -from typing import Any, cast +from typing import Any from urllib.parse import quote +from uuid import UUID import httpx -from ...client import AuthenticatedClient, Client -from ...types import Response, UNSET from ... import errors - +from ...client import AuthenticatedClient, Client from ...models.gift_public import GiftPublic from ...models.gift_update import GiftUpdate from ...models.http_validation_error import HTTPValidationError -from typing import cast -from uuid import UUID - +from ...types import Response def _get_kwargs( gift_id: UUID, *, body: GiftUpdate, - ) -> dict[str, Any]: headers: dict[str, Any] = {} - - - - - _kwargs: dict[str, Any] = { "method": "patch", - "url": "/api/v1/gifts/{gift_id}".format(gift_id=quote(str(gift_id), safe=""),), + "url": "/api/v1/gifts/{gift_id}".format( + gift_id=quote(str(gift_id), safe=""), + ), } _kwargs["json"] = body.to_dict() - headers["Content-Type"] = "application/json" _kwargs["headers"] = headers return _kwargs - -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> GiftPublic | HTTPValidationError | None: +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> GiftPublic | HTTPValidationError | None: if response.status_code == 200: response_200 = GiftPublic.from_dict(response.json()) - - return response_200 if response.status_code == 422: response_422 = HTTPValidationError.from_dict(response.json()) - - return response_422 if client.raise_on_unexpected_status: @@ -65,7 +54,9 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[GiftPublic | HTTPValidationError]: +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[GiftPublic | HTTPValidationError]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -79,9 +70,8 @@ def sync_detailed( *, client: AuthenticatedClient, body: GiftUpdate, - ) -> Response[GiftPublic | HTTPValidationError]: - """ Update Gift + """Update Gift Update a gift. @@ -95,13 +85,11 @@ def sync_detailed( Returns: Response[GiftPublic | HTTPValidationError] - """ - + """ kwargs = _get_kwargs( gift_id=gift_id, -body=body, - + body=body, ) response = client.get_httpx_client().request( @@ -110,14 +98,14 @@ def sync_detailed( return _build_response(client=client, response=response) + def sync( gift_id: UUID, *, client: AuthenticatedClient, body: GiftUpdate, - ) -> GiftPublic | HTTPValidationError | None: - """ Update Gift + """Update Gift Update a gift. @@ -131,24 +119,22 @@ def sync( Returns: GiftPublic | HTTPValidationError - """ - + """ return sync_detailed( gift_id=gift_id, -client=client, -body=body, - + client=client, + body=body, ).parsed + async def asyncio_detailed( gift_id: UUID, *, client: AuthenticatedClient, body: GiftUpdate, - ) -> Response[GiftPublic | HTTPValidationError]: - """ Update Gift + """Update Gift Update a gift. @@ -162,29 +148,25 @@ async def asyncio_detailed( Returns: Response[GiftPublic | HTTPValidationError] - """ - + """ kwargs = _get_kwargs( gift_id=gift_id, -body=body, - + body=body, ) - response = await client.get_async_httpx_client().request( - **kwargs - ) + response = await client.get_async_httpx_client().request(**kwargs) return _build_response(client=client, response=response) + async def asyncio( gift_id: UUID, *, client: AuthenticatedClient, body: GiftUpdate, - ) -> GiftPublic | HTTPValidationError | None: - """ Update Gift + """Update Gift Update a gift. @@ -198,12 +180,12 @@ async def asyncio( Returns: GiftPublic | HTTPValidationError - """ - - - return (await asyncio_detailed( - gift_id=gift_id, -client=client, -body=body, - - )).parsed + """ + + return ( + await asyncio_detailed( + gift_id=gift_id, + client=client, + body=body, + ) + ).parsed diff --git a/kindred-sdk/personal_crm_client/api/groups/__init__.py b/kindred-sdk/personal_crm_client/api/groups/__init__.py index c9921b5f..2d7c0b23 100644 --- a/kindred-sdk/personal_crm_client/api/groups/__init__.py +++ b/kindred-sdk/personal_crm_client/api/groups/__init__.py @@ -1 +1 @@ -""" Contains endpoint functions for accessing the API """ +"""Contains endpoint functions for accessing the API""" diff --git a/kindred-sdk/personal_crm_client/api/groups/groups_create_group_route.py b/kindred-sdk/personal_crm_client/api/groups/groups_create_group_route.py index 929217e2..336b0139 100644 --- a/kindred-sdk/personal_crm_client/api/groups/groups_create_group_route.py +++ b/kindred-sdk/personal_crm_client/api/groups/groups_create_group_route.py @@ -1,32 +1,22 @@ from http import HTTPStatus -from typing import Any, cast -from urllib.parse import quote +from typing import Any import httpx -from ...client import AuthenticatedClient, Client -from ...types import Response, UNSET from ... import errors - +from ...client import AuthenticatedClient, Client from ...models.group_create import GroupCreate from ...models.group_public import GroupPublic from ...models.http_validation_error import HTTPValidationError -from typing import cast - +from ...types import Response def _get_kwargs( *, body: GroupCreate, - ) -> dict[str, Any]: headers: dict[str, Any] = {} - - - - - _kwargs: dict[str, Any] = { "method": "post", "url": "/api/v1/groups/", @@ -34,27 +24,23 @@ def _get_kwargs( _kwargs["json"] = body.to_dict() - headers["Content-Type"] = "application/json" _kwargs["headers"] = headers return _kwargs - -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> GroupPublic | HTTPValidationError | None: +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> GroupPublic | HTTPValidationError | None: if response.status_code == 200: response_200 = GroupPublic.from_dict(response.json()) - - return response_200 if response.status_code == 422: response_422 = HTTPValidationError.from_dict(response.json()) - - return response_422 if client.raise_on_unexpected_status: @@ -63,7 +49,9 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[GroupPublic | HTTPValidationError]: +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[GroupPublic | HTTPValidationError]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -76,9 +64,8 @@ def sync_detailed( *, client: AuthenticatedClient, body: GroupCreate, - ) -> Response[GroupPublic | HTTPValidationError]: - """ Create Group Route + """Create Group Route Create a new group. @@ -91,12 +78,10 @@ def sync_detailed( Returns: Response[GroupPublic | HTTPValidationError] - """ - + """ kwargs = _get_kwargs( body=body, - ) response = client.get_httpx_client().request( @@ -105,13 +90,13 @@ def sync_detailed( return _build_response(client=client, response=response) + def sync( *, client: AuthenticatedClient, body: GroupCreate, - ) -> GroupPublic | HTTPValidationError | None: - """ Create Group Route + """Create Group Route Create a new group. @@ -124,22 +109,20 @@ def sync( Returns: GroupPublic | HTTPValidationError - """ - + """ return sync_detailed( client=client, -body=body, - + body=body, ).parsed + async def asyncio_detailed( *, client: AuthenticatedClient, body: GroupCreate, - ) -> Response[GroupPublic | HTTPValidationError]: - """ Create Group Route + """Create Group Route Create a new group. @@ -152,27 +135,23 @@ async def asyncio_detailed( Returns: Response[GroupPublic | HTTPValidationError] - """ - + """ kwargs = _get_kwargs( body=body, - ) - response = await client.get_async_httpx_client().request( - **kwargs - ) + response = await client.get_async_httpx_client().request(**kwargs) return _build_response(client=client, response=response) + async def asyncio( *, client: AuthenticatedClient, body: GroupCreate, - ) -> GroupPublic | HTTPValidationError | None: - """ Create Group Route + """Create Group Route Create a new group. @@ -185,11 +164,11 @@ async def asyncio( Returns: GroupPublic | HTTPValidationError - """ + """ - - return (await asyncio_detailed( - client=client, -body=body, - - )).parsed + return ( + await asyncio_detailed( + client=client, + body=body, + ) + ).parsed diff --git a/kindred-sdk/personal_crm_client/api/groups/groups_delete_group.py b/kindred-sdk/personal_crm_client/api/groups/groups_delete_group.py index 07305adc..593205d3 100644 --- a/kindred-sdk/personal_crm_client/api/groups/groups_delete_group.py +++ b/kindred-sdk/personal_crm_client/api/groups/groups_delete_group.py @@ -1,40 +1,32 @@ from http import HTTPStatus -from typing import Any, cast +from typing import Any from urllib.parse import quote +from uuid import UUID import httpx -from ...client import AuthenticatedClient, Client -from ...types import Response, UNSET from ... import errors - +from ...client import AuthenticatedClient, Client from ...models.http_validation_error import HTTPValidationError -from typing import cast -from uuid import UUID - +from ...types import Response def _get_kwargs( group_id: UUID, - ) -> dict[str, Any]: - - - - - - _kwargs: dict[str, Any] = { "method": "delete", - "url": "/api/v1/groups/{group_id}".format(group_id=quote(str(group_id), safe=""),), + "url": "/api/v1/groups/{group_id}".format( + group_id=quote(str(group_id), safe=""), + ), } - return _kwargs - -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Any | HTTPValidationError | None: +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Any | HTTPValidationError | None: if response.status_code == 200: response_200 = response.json() return response_200 @@ -42,8 +34,6 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res if response.status_code == 422: response_422 = HTTPValidationError.from_dict(response.json()) - - return response_422 if client.raise_on_unexpected_status: @@ -52,7 +42,9 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[Any | HTTPValidationError]: +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[Any | HTTPValidationError]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -65,9 +57,8 @@ def sync_detailed( group_id: UUID, *, client: AuthenticatedClient, - ) -> Response[Any | HTTPValidationError]: - """ Delete Group + """Delete Group Delete a group. @@ -80,12 +71,10 @@ def sync_detailed( Returns: Response[Any | HTTPValidationError] - """ - + """ kwargs = _get_kwargs( group_id=group_id, - ) response = client.get_httpx_client().request( @@ -94,13 +83,13 @@ def sync_detailed( return _build_response(client=client, response=response) + def sync( group_id: UUID, *, client: AuthenticatedClient, - ) -> Any | HTTPValidationError | None: - """ Delete Group + """Delete Group Delete a group. @@ -113,22 +102,20 @@ def sync( Returns: Any | HTTPValidationError - """ - + """ return sync_detailed( group_id=group_id, -client=client, - + client=client, ).parsed + async def asyncio_detailed( group_id: UUID, *, client: AuthenticatedClient, - ) -> Response[Any | HTTPValidationError]: - """ Delete Group + """Delete Group Delete a group. @@ -141,27 +128,23 @@ async def asyncio_detailed( Returns: Response[Any | HTTPValidationError] - """ - + """ kwargs = _get_kwargs( group_id=group_id, - ) - response = await client.get_async_httpx_client().request( - **kwargs - ) + response = await client.get_async_httpx_client().request(**kwargs) return _build_response(client=client, response=response) + async def asyncio( group_id: UUID, *, client: AuthenticatedClient, - ) -> Any | HTTPValidationError | None: - """ Delete Group + """Delete Group Delete a group. @@ -174,11 +157,11 @@ async def asyncio( Returns: Any | HTTPValidationError - """ + """ - - return (await asyncio_detailed( - group_id=group_id, -client=client, - - )).parsed + return ( + await asyncio_detailed( + group_id=group_id, + client=client, + ) + ).parsed diff --git a/kindred-sdk/personal_crm_client/api/groups/groups_list_groups.py b/kindred-sdk/personal_crm_client/api/groups/groups_list_groups.py index 50f8ec89..5a37608e 100644 --- a/kindred-sdk/personal_crm_client/api/groups/groups_list_groups.py +++ b/kindred-sdk/personal_crm_client/api/groups/groups_list_groups.py @@ -1,64 +1,48 @@ from http import HTTPStatus -from typing import Any, cast -from urllib.parse import quote +from typing import Any import httpx -from ...client import AuthenticatedClient, Client -from ...types import Response, UNSET from ... import errors - +from ...client import AuthenticatedClient, Client from ...models.groups_public import GroupsPublic from ...models.http_validation_error import HTTPValidationError -from ...types import UNSET, Unset -from typing import cast - +from ...types import UNSET, Response, Unset def _get_kwargs( *, skip: int | Unset = 0, limit: int | Unset = 100, - ) -> dict[str, Any]: - - - - params: dict[str, Any] = {} params["skip"] = skip params["limit"] = limit - params = {k: v for k, v in params.items() if v is not UNSET and v is not None} - _kwargs: dict[str, Any] = { "method": "get", "url": "/api/v1/groups/", "params": params, } - return _kwargs - -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> GroupsPublic | HTTPValidationError | None: +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> GroupsPublic | HTTPValidationError | None: if response.status_code == 200: response_200 = GroupsPublic.from_dict(response.json()) - - return response_200 if response.status_code == 422: response_422 = HTTPValidationError.from_dict(response.json()) - - return response_422 if client.raise_on_unexpected_status: @@ -67,7 +51,9 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[GroupsPublic | HTTPValidationError]: +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[GroupsPublic | HTTPValidationError]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -81,9 +67,8 @@ def sync_detailed( client: AuthenticatedClient, skip: int | Unset = 0, limit: int | Unset = 100, - ) -> Response[GroupsPublic | HTTPValidationError]: - """ List Groups + """List Groups List all groups for the current user. @@ -97,13 +82,11 @@ def sync_detailed( Returns: Response[GroupsPublic | HTTPValidationError] - """ - + """ kwargs = _get_kwargs( skip=skip, -limit=limit, - + limit=limit, ) response = client.get_httpx_client().request( @@ -112,14 +95,14 @@ def sync_detailed( return _build_response(client=client, response=response) + def sync( *, client: AuthenticatedClient, skip: int | Unset = 0, limit: int | Unset = 100, - ) -> GroupsPublic | HTTPValidationError | None: - """ List Groups + """List Groups List all groups for the current user. @@ -133,24 +116,22 @@ def sync( Returns: GroupsPublic | HTTPValidationError - """ - + """ return sync_detailed( client=client, -skip=skip, -limit=limit, - + skip=skip, + limit=limit, ).parsed + async def asyncio_detailed( *, client: AuthenticatedClient, skip: int | Unset = 0, limit: int | Unset = 100, - ) -> Response[GroupsPublic | HTTPValidationError]: - """ List Groups + """List Groups List all groups for the current user. @@ -164,29 +145,25 @@ async def asyncio_detailed( Returns: Response[GroupsPublic | HTTPValidationError] - """ - + """ kwargs = _get_kwargs( skip=skip, -limit=limit, - + limit=limit, ) - response = await client.get_async_httpx_client().request( - **kwargs - ) + response = await client.get_async_httpx_client().request(**kwargs) return _build_response(client=client, response=response) + async def asyncio( *, client: AuthenticatedClient, skip: int | Unset = 0, limit: int | Unset = 100, - ) -> GroupsPublic | HTTPValidationError | None: - """ List Groups + """List Groups List all groups for the current user. @@ -200,12 +177,12 @@ async def asyncio( Returns: GroupsPublic | HTTPValidationError - """ - - - return (await asyncio_detailed( - client=client, -skip=skip, -limit=limit, - - )).parsed + """ + + return ( + await asyncio_detailed( + client=client, + skip=skip, + limit=limit, + ) + ).parsed diff --git a/kindred-sdk/personal_crm_client/api/groups/groups_update_group.py b/kindred-sdk/personal_crm_client/api/groups/groups_update_group.py index 44ebb5dd..6b70b881 100644 --- a/kindred-sdk/personal_crm_client/api/groups/groups_update_group.py +++ b/kindred-sdk/personal_crm_client/api/groups/groups_update_group.py @@ -1,62 +1,51 @@ from http import HTTPStatus -from typing import Any, cast +from typing import Any from urllib.parse import quote +from uuid import UUID import httpx -from ...client import AuthenticatedClient, Client -from ...types import Response, UNSET from ... import errors - +from ...client import AuthenticatedClient, Client from ...models.group_public import GroupPublic from ...models.group_update import GroupUpdate from ...models.http_validation_error import HTTPValidationError -from typing import cast -from uuid import UUID - +from ...types import Response def _get_kwargs( group_id: UUID, *, body: GroupUpdate, - ) -> dict[str, Any]: headers: dict[str, Any] = {} - - - - - _kwargs: dict[str, Any] = { "method": "patch", - "url": "/api/v1/groups/{group_id}".format(group_id=quote(str(group_id), safe=""),), + "url": "/api/v1/groups/{group_id}".format( + group_id=quote(str(group_id), safe=""), + ), } _kwargs["json"] = body.to_dict() - headers["Content-Type"] = "application/json" _kwargs["headers"] = headers return _kwargs - -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> GroupPublic | HTTPValidationError | None: +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> GroupPublic | HTTPValidationError | None: if response.status_code == 200: response_200 = GroupPublic.from_dict(response.json()) - - return response_200 if response.status_code == 422: response_422 = HTTPValidationError.from_dict(response.json()) - - return response_422 if client.raise_on_unexpected_status: @@ -65,7 +54,9 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[GroupPublic | HTTPValidationError]: +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[GroupPublic | HTTPValidationError]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -79,9 +70,8 @@ def sync_detailed( *, client: AuthenticatedClient, body: GroupUpdate, - ) -> Response[GroupPublic | HTTPValidationError]: - """ Update Group + """Update Group Update a group. @@ -95,13 +85,11 @@ def sync_detailed( Returns: Response[GroupPublic | HTTPValidationError] - """ - + """ kwargs = _get_kwargs( group_id=group_id, -body=body, - + body=body, ) response = client.get_httpx_client().request( @@ -110,14 +98,14 @@ def sync_detailed( return _build_response(client=client, response=response) + def sync( group_id: UUID, *, client: AuthenticatedClient, body: GroupUpdate, - ) -> GroupPublic | HTTPValidationError | None: - """ Update Group + """Update Group Update a group. @@ -131,24 +119,22 @@ def sync( Returns: GroupPublic | HTTPValidationError - """ - + """ return sync_detailed( group_id=group_id, -client=client, -body=body, - + client=client, + body=body, ).parsed + async def asyncio_detailed( group_id: UUID, *, client: AuthenticatedClient, body: GroupUpdate, - ) -> Response[GroupPublic | HTTPValidationError]: - """ Update Group + """Update Group Update a group. @@ -162,29 +148,25 @@ async def asyncio_detailed( Returns: Response[GroupPublic | HTTPValidationError] - """ - + """ kwargs = _get_kwargs( group_id=group_id, -body=body, - + body=body, ) - response = await client.get_async_httpx_client().request( - **kwargs - ) + response = await client.get_async_httpx_client().request(**kwargs) return _build_response(client=client, response=response) + async def asyncio( group_id: UUID, *, client: AuthenticatedClient, body: GroupUpdate, - ) -> GroupPublic | HTTPValidationError | None: - """ Update Group + """Update Group Update a group. @@ -198,12 +180,12 @@ async def asyncio( Returns: GroupPublic | HTTPValidationError - """ - - - return (await asyncio_detailed( - group_id=group_id, -client=client, -body=body, - - )).parsed + """ + + return ( + await asyncio_detailed( + group_id=group_id, + client=client, + body=body, + ) + ).parsed diff --git a/kindred-sdk/personal_crm_client/api/import_export/__init__.py b/kindred-sdk/personal_crm_client/api/import_export/__init__.py index c9921b5f..2d7c0b23 100644 --- a/kindred-sdk/personal_crm_client/api/import_export/__init__.py +++ b/kindred-sdk/personal_crm_client/api/import_export/__init__.py @@ -1 +1 @@ -""" Contains endpoint functions for accessing the API """ +"""Contains endpoint functions for accessing the API""" diff --git a/kindred-sdk/personal_crm_client/api/import_export/import_export_export_json.py b/kindred-sdk/personal_crm_client/api/import_export/import_export_export_json.py index 95b07358..dcfc0cd6 100644 --- a/kindred-sdk/personal_crm_client/api/import_export/import_export_export_json.py +++ b/kindred-sdk/personal_crm_client/api/import_export/import_export_export_json.py @@ -1,35 +1,22 @@ from http import HTTPStatus -from typing import Any, cast -from urllib.parse import quote +from typing import Any import httpx -from ...client import AuthenticatedClient, Client -from ...types import Response, UNSET from ... import errors +from ...client import AuthenticatedClient, Client +from ...types import Response - - -def _get_kwargs( - -) -> dict[str, Any]: - - - - - - +def _get_kwargs() -> dict[str, Any]: _kwargs: dict[str, Any] = { "method": "get", "url": "/api/v1/import-export/export/json", } - return _kwargs - def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Any | None: if response.status_code == 200: return None @@ -52,9 +39,8 @@ def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Res def sync_detailed( *, client: AuthenticatedClient, - ) -> Response[Any]: - """ Export Json + """Export Json Export all data as JSON. @@ -64,12 +50,9 @@ def sync_detailed( Returns: Response[Any] - """ - + """ - kwargs = _get_kwargs( - - ) + kwargs = _get_kwargs() response = client.get_httpx_client().request( **kwargs, @@ -81,9 +64,8 @@ def sync_detailed( async def asyncio_detailed( *, client: AuthenticatedClient, - ) -> Response[Any]: - """ Export Json + """Export Json Export all data as JSON. @@ -93,16 +75,10 @@ async def asyncio_detailed( Returns: Response[Any] - """ + """ + kwargs = _get_kwargs() - kwargs = _get_kwargs( - - ) - - response = await client.get_async_httpx_client().request( - **kwargs - ) + response = await client.get_async_httpx_client().request(**kwargs) return _build_response(client=client, response=response) - diff --git a/kindred-sdk/personal_crm_client/api/import_export/import_export_export_vcard.py b/kindred-sdk/personal_crm_client/api/import_export/import_export_export_vcard.py index a6d9a66c..23370086 100644 --- a/kindred-sdk/personal_crm_client/api/import_export/import_export_export_vcard.py +++ b/kindred-sdk/personal_crm_client/api/import_export/import_export_export_vcard.py @@ -1,35 +1,22 @@ from http import HTTPStatus -from typing import Any, cast -from urllib.parse import quote +from typing import Any import httpx -from ...client import AuthenticatedClient, Client -from ...types import Response, UNSET from ... import errors +from ...client import AuthenticatedClient, Client +from ...types import Response - - -def _get_kwargs( - -) -> dict[str, Any]: - - - - - - +def _get_kwargs() -> dict[str, Any]: _kwargs: dict[str, Any] = { "method": "get", "url": "/api/v1/import-export/export/vcard", } - return _kwargs - def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Any | None: if response.status_code == 200: return None @@ -52,9 +39,8 @@ def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Res def sync_detailed( *, client: AuthenticatedClient, - ) -> Response[Any]: - """ Export Vcard + """Export Vcard Export all contacts as a single .vcf file. @@ -64,12 +50,9 @@ def sync_detailed( Returns: Response[Any] - """ - + """ - kwargs = _get_kwargs( - - ) + kwargs = _get_kwargs() response = client.get_httpx_client().request( **kwargs, @@ -81,9 +64,8 @@ def sync_detailed( async def asyncio_detailed( *, client: AuthenticatedClient, - ) -> Response[Any]: - """ Export Vcard + """Export Vcard Export all contacts as a single .vcf file. @@ -93,16 +75,10 @@ async def asyncio_detailed( Returns: Response[Any] - """ + """ + kwargs = _get_kwargs() - kwargs = _get_kwargs( - - ) - - response = await client.get_async_httpx_client().request( - **kwargs - ) + response = await client.get_async_httpx_client().request(**kwargs) return _build_response(client=client, response=response) - diff --git a/kindred-sdk/personal_crm_client/api/import_export/import_export_import_vcard.py b/kindred-sdk/personal_crm_client/api/import_export/import_export_import_vcard.py index ffcb5802..164640c3 100644 --- a/kindred-sdk/personal_crm_client/api/import_export/import_export_import_vcard.py +++ b/kindred-sdk/personal_crm_client/api/import_export/import_export_import_vcard.py @@ -1,31 +1,21 @@ from http import HTTPStatus -from typing import Any, cast -from urllib.parse import quote +from typing import Any import httpx -from ...client import AuthenticatedClient, Client -from ...types import Response, UNSET from ... import errors - +from ...client import AuthenticatedClient, Client from ...models.body_import_export_import_vcard import BodyImportExportImportVcard from ...models.http_validation_error import HTTPValidationError -from typing import cast - +from ...types import Response def _get_kwargs( *, body: BodyImportExportImportVcard, - ) -> dict[str, Any]: headers: dict[str, Any] = {} - - - - - _kwargs: dict[str, Any] = { "method": "post", "url": "/api/v1/import-export/import/vcard", @@ -33,14 +23,13 @@ def _get_kwargs( _kwargs["files"] = body.to_multipart() - - _kwargs["headers"] = headers return _kwargs - -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Any | HTTPValidationError | None: +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Any | HTTPValidationError | None: if response.status_code == 200: response_200 = response.json() return response_200 @@ -48,8 +37,6 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res if response.status_code == 422: response_422 = HTTPValidationError.from_dict(response.json()) - - return response_422 if client.raise_on_unexpected_status: @@ -58,7 +45,9 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[Any | HTTPValidationError]: +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[Any | HTTPValidationError]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -71,9 +60,8 @@ def sync_detailed( *, client: AuthenticatedClient, body: BodyImportExportImportVcard, - ) -> Response[Any | HTTPValidationError]: - """ Import Vcard + """Import Vcard Import contacts from a .vcf file (supports multiple vCards in one file). @@ -86,12 +74,10 @@ def sync_detailed( Returns: Response[Any | HTTPValidationError] - """ - + """ kwargs = _get_kwargs( body=body, - ) response = client.get_httpx_client().request( @@ -100,13 +86,13 @@ def sync_detailed( return _build_response(client=client, response=response) + def sync( *, client: AuthenticatedClient, body: BodyImportExportImportVcard, - ) -> Any | HTTPValidationError | None: - """ Import Vcard + """Import Vcard Import contacts from a .vcf file (supports multiple vCards in one file). @@ -119,22 +105,20 @@ def sync( Returns: Any | HTTPValidationError - """ - + """ return sync_detailed( client=client, -body=body, - + body=body, ).parsed + async def asyncio_detailed( *, client: AuthenticatedClient, body: BodyImportExportImportVcard, - ) -> Response[Any | HTTPValidationError]: - """ Import Vcard + """Import Vcard Import contacts from a .vcf file (supports multiple vCards in one file). @@ -147,27 +131,23 @@ async def asyncio_detailed( Returns: Response[Any | HTTPValidationError] - """ - + """ kwargs = _get_kwargs( body=body, - ) - response = await client.get_async_httpx_client().request( - **kwargs - ) + response = await client.get_async_httpx_client().request(**kwargs) return _build_response(client=client, response=response) + async def asyncio( *, client: AuthenticatedClient, body: BodyImportExportImportVcard, - ) -> Any | HTTPValidationError | None: - """ Import Vcard + """Import Vcard Import contacts from a .vcf file (supports multiple vCards in one file). @@ -180,11 +160,11 @@ async def asyncio( Returns: Any | HTTPValidationError - """ + """ - - return (await asyncio_detailed( - client=client, -body=body, - - )).parsed + return ( + await asyncio_detailed( + client=client, + body=body, + ) + ).parsed diff --git a/kindred-sdk/personal_crm_client/api/interactions/__init__.py b/kindred-sdk/personal_crm_client/api/interactions/__init__.py index c9921b5f..2d7c0b23 100644 --- a/kindred-sdk/personal_crm_client/api/interactions/__init__.py +++ b/kindred-sdk/personal_crm_client/api/interactions/__init__.py @@ -1 +1 @@ -""" Contains endpoint functions for accessing the API """ +"""Contains endpoint functions for accessing the API""" diff --git a/kindred-sdk/personal_crm_client/api/interactions/interactions_create_interaction_route.py b/kindred-sdk/personal_crm_client/api/interactions/interactions_create_interaction_route.py index f9f99942..10eee8e8 100644 --- a/kindred-sdk/personal_crm_client/api/interactions/interactions_create_interaction_route.py +++ b/kindred-sdk/personal_crm_client/api/interactions/interactions_create_interaction_route.py @@ -1,32 +1,22 @@ from http import HTTPStatus -from typing import Any, cast -from urllib.parse import quote +from typing import Any import httpx -from ...client import AuthenticatedClient, Client -from ...types import Response, UNSET from ... import errors - +from ...client import AuthenticatedClient, Client from ...models.http_validation_error import HTTPValidationError from ...models.interaction_create import InteractionCreate from ...models.interaction_public import InteractionPublic -from typing import cast - +from ...types import Response def _get_kwargs( *, body: InteractionCreate, - ) -> dict[str, Any]: headers: dict[str, Any] = {} - - - - - _kwargs: dict[str, Any] = { "method": "post", "url": "/api/v1/interactions/", @@ -34,27 +24,23 @@ def _get_kwargs( _kwargs["json"] = body.to_dict() - headers["Content-Type"] = "application/json" _kwargs["headers"] = headers return _kwargs - -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> HTTPValidationError | InteractionPublic | None: +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> HTTPValidationError | InteractionPublic | None: if response.status_code == 200: response_200 = InteractionPublic.from_dict(response.json()) - - return response_200 if response.status_code == 422: response_422 = HTTPValidationError.from_dict(response.json()) - - return response_422 if client.raise_on_unexpected_status: @@ -63,7 +49,9 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[HTTPValidationError | InteractionPublic]: +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[HTTPValidationError | InteractionPublic]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -76,9 +64,8 @@ def sync_detailed( *, client: AuthenticatedClient, body: InteractionCreate, - ) -> Response[HTTPValidationError | InteractionPublic]: - """ Create Interaction Route + """Create Interaction Route Create a new interaction with one or more attendees. @@ -91,12 +78,10 @@ def sync_detailed( Returns: Response[HTTPValidationError | InteractionPublic] - """ - + """ kwargs = _get_kwargs( body=body, - ) response = client.get_httpx_client().request( @@ -105,13 +90,13 @@ def sync_detailed( return _build_response(client=client, response=response) + def sync( *, client: AuthenticatedClient, body: InteractionCreate, - ) -> HTTPValidationError | InteractionPublic | None: - """ Create Interaction Route + """Create Interaction Route Create a new interaction with one or more attendees. @@ -124,22 +109,20 @@ def sync( Returns: HTTPValidationError | InteractionPublic - """ - + """ return sync_detailed( client=client, -body=body, - + body=body, ).parsed + async def asyncio_detailed( *, client: AuthenticatedClient, body: InteractionCreate, - ) -> Response[HTTPValidationError | InteractionPublic]: - """ Create Interaction Route + """Create Interaction Route Create a new interaction with one or more attendees. @@ -152,27 +135,23 @@ async def asyncio_detailed( Returns: Response[HTTPValidationError | InteractionPublic] - """ - + """ kwargs = _get_kwargs( body=body, - ) - response = await client.get_async_httpx_client().request( - **kwargs - ) + response = await client.get_async_httpx_client().request(**kwargs) return _build_response(client=client, response=response) + async def asyncio( *, client: AuthenticatedClient, body: InteractionCreate, - ) -> HTTPValidationError | InteractionPublic | None: - """ Create Interaction Route + """Create Interaction Route Create a new interaction with one or more attendees. @@ -185,11 +164,11 @@ async def asyncio( Returns: HTTPValidationError | InteractionPublic - """ + """ - - return (await asyncio_detailed( - client=client, -body=body, - - )).parsed + return ( + await asyncio_detailed( + client=client, + body=body, + ) + ).parsed diff --git a/kindred-sdk/personal_crm_client/api/interactions/interactions_delete_interaction.py b/kindred-sdk/personal_crm_client/api/interactions/interactions_delete_interaction.py index f8f23ad8..bfdf1e2e 100644 --- a/kindred-sdk/personal_crm_client/api/interactions/interactions_delete_interaction.py +++ b/kindred-sdk/personal_crm_client/api/interactions/interactions_delete_interaction.py @@ -1,40 +1,32 @@ from http import HTTPStatus -from typing import Any, cast +from typing import Any from urllib.parse import quote +from uuid import UUID import httpx -from ...client import AuthenticatedClient, Client -from ...types import Response, UNSET from ... import errors - +from ...client import AuthenticatedClient, Client from ...models.http_validation_error import HTTPValidationError -from typing import cast -from uuid import UUID - +from ...types import Response def _get_kwargs( interaction_id: UUID, - ) -> dict[str, Any]: - - - - - - _kwargs: dict[str, Any] = { "method": "delete", - "url": "/api/v1/interactions/{interaction_id}".format(interaction_id=quote(str(interaction_id), safe=""),), + "url": "/api/v1/interactions/{interaction_id}".format( + interaction_id=quote(str(interaction_id), safe=""), + ), } - return _kwargs - -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Any | HTTPValidationError | None: +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Any | HTTPValidationError | None: if response.status_code == 200: response_200 = response.json() return response_200 @@ -42,8 +34,6 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res if response.status_code == 422: response_422 = HTTPValidationError.from_dict(response.json()) - - return response_422 if client.raise_on_unexpected_status: @@ -52,7 +42,9 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[Any | HTTPValidationError]: +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[Any | HTTPValidationError]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -65,9 +57,8 @@ def sync_detailed( interaction_id: UUID, *, client: AuthenticatedClient, - ) -> Response[Any | HTTPValidationError]: - """ Delete Interaction + """Delete Interaction Delete an interaction and recompute each attendee's last_contacted_at. @@ -80,12 +71,10 @@ def sync_detailed( Returns: Response[Any | HTTPValidationError] - """ - + """ kwargs = _get_kwargs( interaction_id=interaction_id, - ) response = client.get_httpx_client().request( @@ -94,13 +83,13 @@ def sync_detailed( return _build_response(client=client, response=response) + def sync( interaction_id: UUID, *, client: AuthenticatedClient, - ) -> Any | HTTPValidationError | None: - """ Delete Interaction + """Delete Interaction Delete an interaction and recompute each attendee's last_contacted_at. @@ -113,22 +102,20 @@ def sync( Returns: Any | HTTPValidationError - """ - + """ return sync_detailed( interaction_id=interaction_id, -client=client, - + client=client, ).parsed + async def asyncio_detailed( interaction_id: UUID, *, client: AuthenticatedClient, - ) -> Response[Any | HTTPValidationError]: - """ Delete Interaction + """Delete Interaction Delete an interaction and recompute each attendee's last_contacted_at. @@ -141,27 +128,23 @@ async def asyncio_detailed( Returns: Response[Any | HTTPValidationError] - """ - + """ kwargs = _get_kwargs( interaction_id=interaction_id, - ) - response = await client.get_async_httpx_client().request( - **kwargs - ) + response = await client.get_async_httpx_client().request(**kwargs) return _build_response(client=client, response=response) + async def asyncio( interaction_id: UUID, *, client: AuthenticatedClient, - ) -> Any | HTTPValidationError | None: - """ Delete Interaction + """Delete Interaction Delete an interaction and recompute each attendee's last_contacted_at. @@ -174,11 +157,11 @@ async def asyncio( Returns: Any | HTTPValidationError - """ + """ - - return (await asyncio_detailed( - interaction_id=interaction_id, -client=client, - - )).parsed + return ( + await asyncio_detailed( + interaction_id=interaction_id, + client=client, + ) + ).parsed diff --git a/kindred-sdk/personal_crm_client/api/interactions/interactions_list_interactions.py b/kindred-sdk/personal_crm_client/api/interactions/interactions_list_interactions.py index 9d49bb9f..885e5a28 100644 --- a/kindred-sdk/personal_crm_client/api/interactions/interactions_list_interactions.py +++ b/kindred-sdk/personal_crm_client/api/interactions/interactions_list_interactions.py @@ -1,19 +1,14 @@ from http import HTTPStatus -from typing import Any, cast -from urllib.parse import quote +from typing import Any +from uuid import UUID import httpx -from ...client import AuthenticatedClient, Client -from ...types import Response, UNSET from ... import errors - +from ...client import AuthenticatedClient, Client from ...models.http_validation_error import HTTPValidationError from ...models.interactions_public import InteractionsPublic -from ...types import UNSET, Unset -from typing import cast -from uuid import UUID - +from ...types import UNSET, Response, Unset def _get_kwargs( @@ -21,12 +16,7 @@ def _get_kwargs( contact_id: None | Unset | UUID = UNSET, skip: int | Unset = 0, limit: int | Unset = 100, - ) -> dict[str, Any]: - - - - params: dict[str, Any] = {} json_contact_id: None | str | Unset @@ -42,34 +32,28 @@ def _get_kwargs( params["limit"] = limit - params = {k: v for k, v in params.items() if v is not UNSET and v is not None} - _kwargs: dict[str, Any] = { "method": "get", "url": "/api/v1/interactions/", "params": params, } - return _kwargs - -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> HTTPValidationError | InteractionsPublic | None: +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> HTTPValidationError | InteractionsPublic | None: if response.status_code == 200: response_200 = InteractionsPublic.from_dict(response.json()) - - return response_200 if response.status_code == 422: response_422 = HTTPValidationError.from_dict(response.json()) - - return response_422 if client.raise_on_unexpected_status: @@ -78,7 +62,9 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[HTTPValidationError | InteractionsPublic]: +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[HTTPValidationError | InteractionsPublic]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -93,9 +79,8 @@ def sync_detailed( contact_id: None | Unset | UUID = UNSET, skip: int | Unset = 0, limit: int | Unset = 100, - ) -> Response[HTTPValidationError | InteractionsPublic]: - """ List Interactions + """List Interactions List interactions. Pass ``contact_id`` to filter by attendee. @@ -110,14 +95,12 @@ def sync_detailed( Returns: Response[HTTPValidationError | InteractionsPublic] - """ - + """ kwargs = _get_kwargs( contact_id=contact_id, -skip=skip, -limit=limit, - + skip=skip, + limit=limit, ) response = client.get_httpx_client().request( @@ -126,15 +109,15 @@ def sync_detailed( return _build_response(client=client, response=response) + def sync( *, client: AuthenticatedClient, contact_id: None | Unset | UUID = UNSET, skip: int | Unset = 0, limit: int | Unset = 100, - ) -> HTTPValidationError | InteractionsPublic | None: - """ List Interactions + """List Interactions List interactions. Pass ``contact_id`` to filter by attendee. @@ -149,26 +132,24 @@ def sync( Returns: HTTPValidationError | InteractionsPublic - """ - + """ return sync_detailed( client=client, -contact_id=contact_id, -skip=skip, -limit=limit, - + contact_id=contact_id, + skip=skip, + limit=limit, ).parsed + async def asyncio_detailed( *, client: AuthenticatedClient, contact_id: None | Unset | UUID = UNSET, skip: int | Unset = 0, limit: int | Unset = 100, - ) -> Response[HTTPValidationError | InteractionsPublic]: - """ List Interactions + """List Interactions List interactions. Pass ``contact_id`` to filter by attendee. @@ -183,31 +164,27 @@ async def asyncio_detailed( Returns: Response[HTTPValidationError | InteractionsPublic] - """ - + """ kwargs = _get_kwargs( contact_id=contact_id, -skip=skip, -limit=limit, - + skip=skip, + limit=limit, ) - response = await client.get_async_httpx_client().request( - **kwargs - ) + response = await client.get_async_httpx_client().request(**kwargs) return _build_response(client=client, response=response) + async def asyncio( *, client: AuthenticatedClient, contact_id: None | Unset | UUID = UNSET, skip: int | Unset = 0, limit: int | Unset = 100, - ) -> HTTPValidationError | InteractionsPublic | None: - """ List Interactions + """List Interactions List interactions. Pass ``contact_id`` to filter by attendee. @@ -222,13 +199,13 @@ async def asyncio( Returns: HTTPValidationError | InteractionsPublic - """ - - - return (await asyncio_detailed( - client=client, -contact_id=contact_id, -skip=skip, -limit=limit, - - )).parsed + """ + + return ( + await asyncio_detailed( + client=client, + contact_id=contact_id, + skip=skip, + limit=limit, + ) + ).parsed diff --git a/kindred-sdk/personal_crm_client/api/interactions/interactions_update_interaction.py b/kindred-sdk/personal_crm_client/api/interactions/interactions_update_interaction.py index e0046d9f..5859eb18 100644 --- a/kindred-sdk/personal_crm_client/api/interactions/interactions_update_interaction.py +++ b/kindred-sdk/personal_crm_client/api/interactions/interactions_update_interaction.py @@ -1,62 +1,51 @@ from http import HTTPStatus -from typing import Any, cast +from typing import Any from urllib.parse import quote +from uuid import UUID import httpx -from ...client import AuthenticatedClient, Client -from ...types import Response, UNSET from ... import errors - +from ...client import AuthenticatedClient, Client from ...models.http_validation_error import HTTPValidationError from ...models.interaction_public import InteractionPublic from ...models.interaction_update import InteractionUpdate -from typing import cast -from uuid import UUID - +from ...types import Response def _get_kwargs( interaction_id: UUID, *, body: InteractionUpdate, - ) -> dict[str, Any]: headers: dict[str, Any] = {} - - - - - _kwargs: dict[str, Any] = { "method": "patch", - "url": "/api/v1/interactions/{interaction_id}".format(interaction_id=quote(str(interaction_id), safe=""),), + "url": "/api/v1/interactions/{interaction_id}".format( + interaction_id=quote(str(interaction_id), safe=""), + ), } _kwargs["json"] = body.to_dict() - headers["Content-Type"] = "application/json" _kwargs["headers"] = headers return _kwargs - -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> HTTPValidationError | InteractionPublic | None: +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> HTTPValidationError | InteractionPublic | None: if response.status_code == 200: response_200 = InteractionPublic.from_dict(response.json()) - - return response_200 if response.status_code == 422: response_422 = HTTPValidationError.from_dict(response.json()) - - return response_422 if client.raise_on_unexpected_status: @@ -65,7 +54,9 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[HTTPValidationError | InteractionPublic]: +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[HTTPValidationError | InteractionPublic]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -79,9 +70,8 @@ def sync_detailed( *, client: AuthenticatedClient, body: InteractionUpdate, - ) -> Response[HTTPValidationError | InteractionPublic]: - """ Update Interaction + """Update Interaction Update an interaction; ``attendee_ids`` replaces the attendee set. @@ -95,13 +85,11 @@ def sync_detailed( Returns: Response[HTTPValidationError | InteractionPublic] - """ - + """ kwargs = _get_kwargs( interaction_id=interaction_id, -body=body, - + body=body, ) response = client.get_httpx_client().request( @@ -110,14 +98,14 @@ def sync_detailed( return _build_response(client=client, response=response) + def sync( interaction_id: UUID, *, client: AuthenticatedClient, body: InteractionUpdate, - ) -> HTTPValidationError | InteractionPublic | None: - """ Update Interaction + """Update Interaction Update an interaction; ``attendee_ids`` replaces the attendee set. @@ -131,24 +119,22 @@ def sync( Returns: HTTPValidationError | InteractionPublic - """ - + """ return sync_detailed( interaction_id=interaction_id, -client=client, -body=body, - + client=client, + body=body, ).parsed + async def asyncio_detailed( interaction_id: UUID, *, client: AuthenticatedClient, body: InteractionUpdate, - ) -> Response[HTTPValidationError | InteractionPublic]: - """ Update Interaction + """Update Interaction Update an interaction; ``attendee_ids`` replaces the attendee set. @@ -162,29 +148,25 @@ async def asyncio_detailed( Returns: Response[HTTPValidationError | InteractionPublic] - """ - + """ kwargs = _get_kwargs( interaction_id=interaction_id, -body=body, - + body=body, ) - response = await client.get_async_httpx_client().request( - **kwargs - ) + response = await client.get_async_httpx_client().request(**kwargs) return _build_response(client=client, response=response) + async def asyncio( interaction_id: UUID, *, client: AuthenticatedClient, body: InteractionUpdate, - ) -> HTTPValidationError | InteractionPublic | None: - """ Update Interaction + """Update Interaction Update an interaction; ``attendee_ids`` replaces the attendee set. @@ -198,12 +180,12 @@ async def asyncio( Returns: HTTPValidationError | InteractionPublic - """ - - - return (await asyncio_detailed( - interaction_id=interaction_id, -client=client, -body=body, - - )).parsed + """ + + return ( + await asyncio_detailed( + interaction_id=interaction_id, + client=client, + body=body, + ) + ).parsed diff --git a/kindred-sdk/personal_crm_client/api/journal/__init__.py b/kindred-sdk/personal_crm_client/api/journal/__init__.py index c9921b5f..2d7c0b23 100644 --- a/kindred-sdk/personal_crm_client/api/journal/__init__.py +++ b/kindred-sdk/personal_crm_client/api/journal/__init__.py @@ -1 +1 @@ -""" Contains endpoint functions for accessing the API """ +"""Contains endpoint functions for accessing the API""" diff --git a/kindred-sdk/personal_crm_client/api/journal/journal_create_journal_entry_route.py b/kindred-sdk/personal_crm_client/api/journal/journal_create_journal_entry_route.py index c45e7b7b..bb3b2355 100644 --- a/kindred-sdk/personal_crm_client/api/journal/journal_create_journal_entry_route.py +++ b/kindred-sdk/personal_crm_client/api/journal/journal_create_journal_entry_route.py @@ -1,32 +1,22 @@ from http import HTTPStatus -from typing import Any, cast -from urllib.parse import quote +from typing import Any import httpx -from ...client import AuthenticatedClient, Client -from ...types import Response, UNSET from ... import errors - +from ...client import AuthenticatedClient, Client from ...models.http_validation_error import HTTPValidationError from ...models.journal_entry_create import JournalEntryCreate from ...models.journal_entry_public import JournalEntryPublic -from typing import cast - +from ...types import Response def _get_kwargs( *, body: JournalEntryCreate, - ) -> dict[str, Any]: headers: dict[str, Any] = {} - - - - - _kwargs: dict[str, Any] = { "method": "post", "url": "/api/v1/journal/", @@ -34,27 +24,23 @@ def _get_kwargs( _kwargs["json"] = body.to_dict() - headers["Content-Type"] = "application/json" _kwargs["headers"] = headers return _kwargs - -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> HTTPValidationError | JournalEntryPublic | None: +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> HTTPValidationError | JournalEntryPublic | None: if response.status_code == 200: response_200 = JournalEntryPublic.from_dict(response.json()) - - return response_200 if response.status_code == 422: response_422 = HTTPValidationError.from_dict(response.json()) - - return response_422 if client.raise_on_unexpected_status: @@ -63,7 +49,9 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[HTTPValidationError | JournalEntryPublic]: +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[HTTPValidationError | JournalEntryPublic]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -76,9 +64,8 @@ def sync_detailed( *, client: AuthenticatedClient, body: JournalEntryCreate, - ) -> Response[HTTPValidationError | JournalEntryPublic]: - """ Create Journal Entry Route + """Create Journal Entry Route Create a new journal entry. @@ -91,12 +78,10 @@ def sync_detailed( Returns: Response[HTTPValidationError | JournalEntryPublic] - """ - + """ kwargs = _get_kwargs( body=body, - ) response = client.get_httpx_client().request( @@ -105,13 +90,13 @@ def sync_detailed( return _build_response(client=client, response=response) + def sync( *, client: AuthenticatedClient, body: JournalEntryCreate, - ) -> HTTPValidationError | JournalEntryPublic | None: - """ Create Journal Entry Route + """Create Journal Entry Route Create a new journal entry. @@ -124,22 +109,20 @@ def sync( Returns: HTTPValidationError | JournalEntryPublic - """ - + """ return sync_detailed( client=client, -body=body, - + body=body, ).parsed + async def asyncio_detailed( *, client: AuthenticatedClient, body: JournalEntryCreate, - ) -> Response[HTTPValidationError | JournalEntryPublic]: - """ Create Journal Entry Route + """Create Journal Entry Route Create a new journal entry. @@ -152,27 +135,23 @@ async def asyncio_detailed( Returns: Response[HTTPValidationError | JournalEntryPublic] - """ - + """ kwargs = _get_kwargs( body=body, - ) - response = await client.get_async_httpx_client().request( - **kwargs - ) + response = await client.get_async_httpx_client().request(**kwargs) return _build_response(client=client, response=response) + async def asyncio( *, client: AuthenticatedClient, body: JournalEntryCreate, - ) -> HTTPValidationError | JournalEntryPublic | None: - """ Create Journal Entry Route + """Create Journal Entry Route Create a new journal entry. @@ -185,11 +164,11 @@ async def asyncio( Returns: HTTPValidationError | JournalEntryPublic - """ + """ - - return (await asyncio_detailed( - client=client, -body=body, - - )).parsed + return ( + await asyncio_detailed( + client=client, + body=body, + ) + ).parsed diff --git a/kindred-sdk/personal_crm_client/api/journal/journal_delete_journal_entry.py b/kindred-sdk/personal_crm_client/api/journal/journal_delete_journal_entry.py index 9b02ef3f..0e6c783c 100644 --- a/kindred-sdk/personal_crm_client/api/journal/journal_delete_journal_entry.py +++ b/kindred-sdk/personal_crm_client/api/journal/journal_delete_journal_entry.py @@ -1,40 +1,32 @@ from http import HTTPStatus -from typing import Any, cast +from typing import Any from urllib.parse import quote +from uuid import UUID import httpx -from ...client import AuthenticatedClient, Client -from ...types import Response, UNSET from ... import errors - +from ...client import AuthenticatedClient, Client from ...models.http_validation_error import HTTPValidationError -from typing import cast -from uuid import UUID - +from ...types import Response def _get_kwargs( entry_id: UUID, - ) -> dict[str, Any]: - - - - - - _kwargs: dict[str, Any] = { "method": "delete", - "url": "/api/v1/journal/{entry_id}".format(entry_id=quote(str(entry_id), safe=""),), + "url": "/api/v1/journal/{entry_id}".format( + entry_id=quote(str(entry_id), safe=""), + ), } - return _kwargs - -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Any | HTTPValidationError | None: +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Any | HTTPValidationError | None: if response.status_code == 200: response_200 = response.json() return response_200 @@ -42,8 +34,6 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res if response.status_code == 422: response_422 = HTTPValidationError.from_dict(response.json()) - - return response_422 if client.raise_on_unexpected_status: @@ -52,7 +42,9 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[Any | HTTPValidationError]: +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[Any | HTTPValidationError]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -65,9 +57,8 @@ def sync_detailed( entry_id: UUID, *, client: AuthenticatedClient, - ) -> Response[Any | HTTPValidationError]: - """ Delete Journal Entry + """Delete Journal Entry Delete a journal entry. @@ -80,12 +71,10 @@ def sync_detailed( Returns: Response[Any | HTTPValidationError] - """ - + """ kwargs = _get_kwargs( entry_id=entry_id, - ) response = client.get_httpx_client().request( @@ -94,13 +83,13 @@ def sync_detailed( return _build_response(client=client, response=response) + def sync( entry_id: UUID, *, client: AuthenticatedClient, - ) -> Any | HTTPValidationError | None: - """ Delete Journal Entry + """Delete Journal Entry Delete a journal entry. @@ -113,22 +102,20 @@ def sync( Returns: Any | HTTPValidationError - """ - + """ return sync_detailed( entry_id=entry_id, -client=client, - + client=client, ).parsed + async def asyncio_detailed( entry_id: UUID, *, client: AuthenticatedClient, - ) -> Response[Any | HTTPValidationError]: - """ Delete Journal Entry + """Delete Journal Entry Delete a journal entry. @@ -141,27 +128,23 @@ async def asyncio_detailed( Returns: Response[Any | HTTPValidationError] - """ - + """ kwargs = _get_kwargs( entry_id=entry_id, - ) - response = await client.get_async_httpx_client().request( - **kwargs - ) + response = await client.get_async_httpx_client().request(**kwargs) return _build_response(client=client, response=response) + async def asyncio( entry_id: UUID, *, client: AuthenticatedClient, - ) -> Any | HTTPValidationError | None: - """ Delete Journal Entry + """Delete Journal Entry Delete a journal entry. @@ -174,11 +157,11 @@ async def asyncio( Returns: Any | HTTPValidationError - """ + """ - - return (await asyncio_detailed( - entry_id=entry_id, -client=client, - - )).parsed + return ( + await asyncio_detailed( + entry_id=entry_id, + client=client, + ) + ).parsed diff --git a/kindred-sdk/personal_crm_client/api/journal/journal_list_journal_entries.py b/kindred-sdk/personal_crm_client/api/journal/journal_list_journal_entries.py index 5edf33c4..4346faff 100644 --- a/kindred-sdk/personal_crm_client/api/journal/journal_list_journal_entries.py +++ b/kindred-sdk/personal_crm_client/api/journal/journal_list_journal_entries.py @@ -1,64 +1,48 @@ from http import HTTPStatus -from typing import Any, cast -from urllib.parse import quote +from typing import Any import httpx -from ...client import AuthenticatedClient, Client -from ...types import Response, UNSET from ... import errors - +from ...client import AuthenticatedClient, Client from ...models.http_validation_error import HTTPValidationError from ...models.journal_entries_public import JournalEntriesPublic -from ...types import UNSET, Unset -from typing import cast - +from ...types import UNSET, Response, Unset def _get_kwargs( *, skip: int | Unset = 0, limit: int | Unset = 100, - ) -> dict[str, Any]: - - - - params: dict[str, Any] = {} params["skip"] = skip params["limit"] = limit - params = {k: v for k, v in params.items() if v is not UNSET and v is not None} - _kwargs: dict[str, Any] = { "method": "get", "url": "/api/v1/journal/", "params": params, } - return _kwargs - -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> HTTPValidationError | JournalEntriesPublic | None: +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> HTTPValidationError | JournalEntriesPublic | None: if response.status_code == 200: response_200 = JournalEntriesPublic.from_dict(response.json()) - - return response_200 if response.status_code == 422: response_422 = HTTPValidationError.from_dict(response.json()) - - return response_422 if client.raise_on_unexpected_status: @@ -67,7 +51,9 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[HTTPValidationError | JournalEntriesPublic]: +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[HTTPValidationError | JournalEntriesPublic]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -81,9 +67,8 @@ def sync_detailed( client: AuthenticatedClient, skip: int | Unset = 0, limit: int | Unset = 100, - ) -> Response[HTTPValidationError | JournalEntriesPublic]: - """ List Journal Entries + """List Journal Entries List journal entries for the current user. @@ -97,13 +82,11 @@ def sync_detailed( Returns: Response[HTTPValidationError | JournalEntriesPublic] - """ - + """ kwargs = _get_kwargs( skip=skip, -limit=limit, - + limit=limit, ) response = client.get_httpx_client().request( @@ -112,14 +95,14 @@ def sync_detailed( return _build_response(client=client, response=response) + def sync( *, client: AuthenticatedClient, skip: int | Unset = 0, limit: int | Unset = 100, - ) -> HTTPValidationError | JournalEntriesPublic | None: - """ List Journal Entries + """List Journal Entries List journal entries for the current user. @@ -133,24 +116,22 @@ def sync( Returns: HTTPValidationError | JournalEntriesPublic - """ - + """ return sync_detailed( client=client, -skip=skip, -limit=limit, - + skip=skip, + limit=limit, ).parsed + async def asyncio_detailed( *, client: AuthenticatedClient, skip: int | Unset = 0, limit: int | Unset = 100, - ) -> Response[HTTPValidationError | JournalEntriesPublic]: - """ List Journal Entries + """List Journal Entries List journal entries for the current user. @@ -164,29 +145,25 @@ async def asyncio_detailed( Returns: Response[HTTPValidationError | JournalEntriesPublic] - """ - + """ kwargs = _get_kwargs( skip=skip, -limit=limit, - + limit=limit, ) - response = await client.get_async_httpx_client().request( - **kwargs - ) + response = await client.get_async_httpx_client().request(**kwargs) return _build_response(client=client, response=response) + async def asyncio( *, client: AuthenticatedClient, skip: int | Unset = 0, limit: int | Unset = 100, - ) -> HTTPValidationError | JournalEntriesPublic | None: - """ List Journal Entries + """List Journal Entries List journal entries for the current user. @@ -200,12 +177,12 @@ async def asyncio( Returns: HTTPValidationError | JournalEntriesPublic - """ - - - return (await asyncio_detailed( - client=client, -skip=skip, -limit=limit, - - )).parsed + """ + + return ( + await asyncio_detailed( + client=client, + skip=skip, + limit=limit, + ) + ).parsed diff --git a/kindred-sdk/personal_crm_client/api/journal/journal_update_journal_entry.py b/kindred-sdk/personal_crm_client/api/journal/journal_update_journal_entry.py index 2d0744e4..cb148db4 100644 --- a/kindred-sdk/personal_crm_client/api/journal/journal_update_journal_entry.py +++ b/kindred-sdk/personal_crm_client/api/journal/journal_update_journal_entry.py @@ -1,62 +1,51 @@ from http import HTTPStatus -from typing import Any, cast +from typing import Any from urllib.parse import quote +from uuid import UUID import httpx -from ...client import AuthenticatedClient, Client -from ...types import Response, UNSET from ... import errors - +from ...client import AuthenticatedClient, Client from ...models.http_validation_error import HTTPValidationError from ...models.journal_entry_public import JournalEntryPublic from ...models.journal_entry_update import JournalEntryUpdate -from typing import cast -from uuid import UUID - +from ...types import Response def _get_kwargs( entry_id: UUID, *, body: JournalEntryUpdate, - ) -> dict[str, Any]: headers: dict[str, Any] = {} - - - - - _kwargs: dict[str, Any] = { "method": "patch", - "url": "/api/v1/journal/{entry_id}".format(entry_id=quote(str(entry_id), safe=""),), + "url": "/api/v1/journal/{entry_id}".format( + entry_id=quote(str(entry_id), safe=""), + ), } _kwargs["json"] = body.to_dict() - headers["Content-Type"] = "application/json" _kwargs["headers"] = headers return _kwargs - -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> HTTPValidationError | JournalEntryPublic | None: +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> HTTPValidationError | JournalEntryPublic | None: if response.status_code == 200: response_200 = JournalEntryPublic.from_dict(response.json()) - - return response_200 if response.status_code == 422: response_422 = HTTPValidationError.from_dict(response.json()) - - return response_422 if client.raise_on_unexpected_status: @@ -65,7 +54,9 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[HTTPValidationError | JournalEntryPublic]: +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[HTTPValidationError | JournalEntryPublic]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -79,9 +70,8 @@ def sync_detailed( *, client: AuthenticatedClient, body: JournalEntryUpdate, - ) -> Response[HTTPValidationError | JournalEntryPublic]: - """ Update Journal Entry + """Update Journal Entry Update a journal entry. @@ -95,13 +85,11 @@ def sync_detailed( Returns: Response[HTTPValidationError | JournalEntryPublic] - """ - + """ kwargs = _get_kwargs( entry_id=entry_id, -body=body, - + body=body, ) response = client.get_httpx_client().request( @@ -110,14 +98,14 @@ def sync_detailed( return _build_response(client=client, response=response) + def sync( entry_id: UUID, *, client: AuthenticatedClient, body: JournalEntryUpdate, - ) -> HTTPValidationError | JournalEntryPublic | None: - """ Update Journal Entry + """Update Journal Entry Update a journal entry. @@ -131,24 +119,22 @@ def sync( Returns: HTTPValidationError | JournalEntryPublic - """ - + """ return sync_detailed( entry_id=entry_id, -client=client, -body=body, - + client=client, + body=body, ).parsed + async def asyncio_detailed( entry_id: UUID, *, client: AuthenticatedClient, body: JournalEntryUpdate, - ) -> Response[HTTPValidationError | JournalEntryPublic]: - """ Update Journal Entry + """Update Journal Entry Update a journal entry. @@ -162,29 +148,25 @@ async def asyncio_detailed( Returns: Response[HTTPValidationError | JournalEntryPublic] - """ - + """ kwargs = _get_kwargs( entry_id=entry_id, -body=body, - + body=body, ) - response = await client.get_async_httpx_client().request( - **kwargs - ) + response = await client.get_async_httpx_client().request(**kwargs) return _build_response(client=client, response=response) + async def asyncio( entry_id: UUID, *, client: AuthenticatedClient, body: JournalEntryUpdate, - ) -> HTTPValidationError | JournalEntryPublic | None: - """ Update Journal Entry + """Update Journal Entry Update a journal entry. @@ -198,12 +180,12 @@ async def asyncio( Returns: HTTPValidationError | JournalEntryPublic - """ - - - return (await asyncio_detailed( - entry_id=entry_id, -client=client, -body=body, - - )).parsed + """ + + return ( + await asyncio_detailed( + entry_id=entry_id, + client=client, + body=body, + ) + ).parsed diff --git a/kindred-sdk/personal_crm_client/api/life_events/__init__.py b/kindred-sdk/personal_crm_client/api/life_events/__init__.py index c9921b5f..2d7c0b23 100644 --- a/kindred-sdk/personal_crm_client/api/life_events/__init__.py +++ b/kindred-sdk/personal_crm_client/api/life_events/__init__.py @@ -1 +1 @@ -""" Contains endpoint functions for accessing the API """ +"""Contains endpoint functions for accessing the API""" diff --git a/kindred-sdk/personal_crm_client/api/life_events/life_events_create_life_event_route.py b/kindred-sdk/personal_crm_client/api/life_events/life_events_create_life_event_route.py index c6c68742..ffc6b590 100644 --- a/kindred-sdk/personal_crm_client/api/life_events/life_events_create_life_event_route.py +++ b/kindred-sdk/personal_crm_client/api/life_events/life_events_create_life_event_route.py @@ -1,32 +1,22 @@ from http import HTTPStatus -from typing import Any, cast -from urllib.parse import quote +from typing import Any import httpx -from ...client import AuthenticatedClient, Client -from ...types import Response, UNSET from ... import errors - +from ...client import AuthenticatedClient, Client from ...models.http_validation_error import HTTPValidationError from ...models.life_event_create import LifeEventCreate from ...models.life_event_public import LifeEventPublic -from typing import cast - +from ...types import Response def _get_kwargs( *, body: LifeEventCreate, - ) -> dict[str, Any]: headers: dict[str, Any] = {} - - - - - _kwargs: dict[str, Any] = { "method": "post", "url": "/api/v1/life-events/", @@ -34,27 +24,23 @@ def _get_kwargs( _kwargs["json"] = body.to_dict() - headers["Content-Type"] = "application/json" _kwargs["headers"] = headers return _kwargs - -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> HTTPValidationError | LifeEventPublic | None: +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> HTTPValidationError | LifeEventPublic | None: if response.status_code == 200: response_200 = LifeEventPublic.from_dict(response.json()) - - return response_200 if response.status_code == 422: response_422 = HTTPValidationError.from_dict(response.json()) - - return response_422 if client.raise_on_unexpected_status: @@ -63,7 +49,9 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[HTTPValidationError | LifeEventPublic]: +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[HTTPValidationError | LifeEventPublic]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -76,9 +64,8 @@ def sync_detailed( *, client: AuthenticatedClient, body: LifeEventCreate, - ) -> Response[HTTPValidationError | LifeEventPublic]: - """ Create Life Event Route + """Create Life Event Route Create a new life event. @@ -91,12 +78,10 @@ def sync_detailed( Returns: Response[HTTPValidationError | LifeEventPublic] - """ - + """ kwargs = _get_kwargs( body=body, - ) response = client.get_httpx_client().request( @@ -105,13 +90,13 @@ def sync_detailed( return _build_response(client=client, response=response) + def sync( *, client: AuthenticatedClient, body: LifeEventCreate, - ) -> HTTPValidationError | LifeEventPublic | None: - """ Create Life Event Route + """Create Life Event Route Create a new life event. @@ -124,22 +109,20 @@ def sync( Returns: HTTPValidationError | LifeEventPublic - """ - + """ return sync_detailed( client=client, -body=body, - + body=body, ).parsed + async def asyncio_detailed( *, client: AuthenticatedClient, body: LifeEventCreate, - ) -> Response[HTTPValidationError | LifeEventPublic]: - """ Create Life Event Route + """Create Life Event Route Create a new life event. @@ -152,27 +135,23 @@ async def asyncio_detailed( Returns: Response[HTTPValidationError | LifeEventPublic] - """ - + """ kwargs = _get_kwargs( body=body, - ) - response = await client.get_async_httpx_client().request( - **kwargs - ) + response = await client.get_async_httpx_client().request(**kwargs) return _build_response(client=client, response=response) + async def asyncio( *, client: AuthenticatedClient, body: LifeEventCreate, - ) -> HTTPValidationError | LifeEventPublic | None: - """ Create Life Event Route + """Create Life Event Route Create a new life event. @@ -185,11 +164,11 @@ async def asyncio( Returns: HTTPValidationError | LifeEventPublic - """ + """ - - return (await asyncio_detailed( - client=client, -body=body, - - )).parsed + return ( + await asyncio_detailed( + client=client, + body=body, + ) + ).parsed diff --git a/kindred-sdk/personal_crm_client/api/life_events/life_events_delete_life_event.py b/kindred-sdk/personal_crm_client/api/life_events/life_events_delete_life_event.py index 9c4021d8..6802fd8d 100644 --- a/kindred-sdk/personal_crm_client/api/life_events/life_events_delete_life_event.py +++ b/kindred-sdk/personal_crm_client/api/life_events/life_events_delete_life_event.py @@ -1,40 +1,32 @@ from http import HTTPStatus -from typing import Any, cast +from typing import Any from urllib.parse import quote +from uuid import UUID import httpx -from ...client import AuthenticatedClient, Client -from ...types import Response, UNSET from ... import errors - +from ...client import AuthenticatedClient, Client from ...models.http_validation_error import HTTPValidationError -from typing import cast -from uuid import UUID - +from ...types import Response def _get_kwargs( event_id: UUID, - ) -> dict[str, Any]: - - - - - - _kwargs: dict[str, Any] = { "method": "delete", - "url": "/api/v1/life-events/{event_id}".format(event_id=quote(str(event_id), safe=""),), + "url": "/api/v1/life-events/{event_id}".format( + event_id=quote(str(event_id), safe=""), + ), } - return _kwargs - -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Any | HTTPValidationError | None: +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Any | HTTPValidationError | None: if response.status_code == 200: response_200 = response.json() return response_200 @@ -42,8 +34,6 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res if response.status_code == 422: response_422 = HTTPValidationError.from_dict(response.json()) - - return response_422 if client.raise_on_unexpected_status: @@ -52,7 +42,9 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[Any | HTTPValidationError]: +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[Any | HTTPValidationError]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -65,9 +57,8 @@ def sync_detailed( event_id: UUID, *, client: AuthenticatedClient, - ) -> Response[Any | HTTPValidationError]: - """ Delete Life Event + """Delete Life Event Delete a life event. @@ -80,12 +71,10 @@ def sync_detailed( Returns: Response[Any | HTTPValidationError] - """ - + """ kwargs = _get_kwargs( event_id=event_id, - ) response = client.get_httpx_client().request( @@ -94,13 +83,13 @@ def sync_detailed( return _build_response(client=client, response=response) + def sync( event_id: UUID, *, client: AuthenticatedClient, - ) -> Any | HTTPValidationError | None: - """ Delete Life Event + """Delete Life Event Delete a life event. @@ -113,22 +102,20 @@ def sync( Returns: Any | HTTPValidationError - """ - + """ return sync_detailed( event_id=event_id, -client=client, - + client=client, ).parsed + async def asyncio_detailed( event_id: UUID, *, client: AuthenticatedClient, - ) -> Response[Any | HTTPValidationError]: - """ Delete Life Event + """Delete Life Event Delete a life event. @@ -141,27 +128,23 @@ async def asyncio_detailed( Returns: Response[Any | HTTPValidationError] - """ - + """ kwargs = _get_kwargs( event_id=event_id, - ) - response = await client.get_async_httpx_client().request( - **kwargs - ) + response = await client.get_async_httpx_client().request(**kwargs) return _build_response(client=client, response=response) + async def asyncio( event_id: UUID, *, client: AuthenticatedClient, - ) -> Any | HTTPValidationError | None: - """ Delete Life Event + """Delete Life Event Delete a life event. @@ -174,11 +157,11 @@ async def asyncio( Returns: Any | HTTPValidationError - """ + """ - - return (await asyncio_detailed( - event_id=event_id, -client=client, - - )).parsed + return ( + await asyncio_detailed( + event_id=event_id, + client=client, + ) + ).parsed diff --git a/kindred-sdk/personal_crm_client/api/life_events/life_events_list_life_events.py b/kindred-sdk/personal_crm_client/api/life_events/life_events_list_life_events.py index 1046786a..c8dce48d 100644 --- a/kindred-sdk/personal_crm_client/api/life_events/life_events_list_life_events.py +++ b/kindred-sdk/personal_crm_client/api/life_events/life_events_list_life_events.py @@ -1,53 +1,41 @@ from http import HTTPStatus -from typing import Any, cast +from typing import Any from urllib.parse import quote +from uuid import UUID import httpx -from ...client import AuthenticatedClient, Client -from ...types import Response, UNSET from ... import errors - +from ...client import AuthenticatedClient, Client from ...models.http_validation_error import HTTPValidationError from ...models.life_events_public import LifeEventsPublic -from typing import cast -from uuid import UUID - +from ...types import Response def _get_kwargs( contact_id: UUID, - ) -> dict[str, Any]: - - - - - - _kwargs: dict[str, Any] = { "method": "get", - "url": "/api/v1/life-events/contact/{contact_id}".format(contact_id=quote(str(contact_id), safe=""),), + "url": "/api/v1/life-events/contact/{contact_id}".format( + contact_id=quote(str(contact_id), safe=""), + ), } - return _kwargs - -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> HTTPValidationError | LifeEventsPublic | None: +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> HTTPValidationError | LifeEventsPublic | None: if response.status_code == 200: response_200 = LifeEventsPublic.from_dict(response.json()) - - return response_200 if response.status_code == 422: response_422 = HTTPValidationError.from_dict(response.json()) - - return response_422 if client.raise_on_unexpected_status: @@ -56,7 +44,9 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[HTTPValidationError | LifeEventsPublic]: +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[HTTPValidationError | LifeEventsPublic]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -69,9 +59,8 @@ def sync_detailed( contact_id: UUID, *, client: AuthenticatedClient, - ) -> Response[HTTPValidationError | LifeEventsPublic]: - """ List Life Events + """List Life Events List life events for a contact. @@ -84,12 +73,10 @@ def sync_detailed( Returns: Response[HTTPValidationError | LifeEventsPublic] - """ - + """ kwargs = _get_kwargs( contact_id=contact_id, - ) response = client.get_httpx_client().request( @@ -98,13 +85,13 @@ def sync_detailed( return _build_response(client=client, response=response) + def sync( contact_id: UUID, *, client: AuthenticatedClient, - ) -> HTTPValidationError | LifeEventsPublic | None: - """ List Life Events + """List Life Events List life events for a contact. @@ -117,22 +104,20 @@ def sync( Returns: HTTPValidationError | LifeEventsPublic - """ - + """ return sync_detailed( contact_id=contact_id, -client=client, - + client=client, ).parsed + async def asyncio_detailed( contact_id: UUID, *, client: AuthenticatedClient, - ) -> Response[HTTPValidationError | LifeEventsPublic]: - """ List Life Events + """List Life Events List life events for a contact. @@ -145,27 +130,23 @@ async def asyncio_detailed( Returns: Response[HTTPValidationError | LifeEventsPublic] - """ - + """ kwargs = _get_kwargs( contact_id=contact_id, - ) - response = await client.get_async_httpx_client().request( - **kwargs - ) + response = await client.get_async_httpx_client().request(**kwargs) return _build_response(client=client, response=response) + async def asyncio( contact_id: UUID, *, client: AuthenticatedClient, - ) -> HTTPValidationError | LifeEventsPublic | None: - """ List Life Events + """List Life Events List life events for a contact. @@ -178,11 +159,11 @@ async def asyncio( Returns: HTTPValidationError | LifeEventsPublic - """ + """ - - return (await asyncio_detailed( - contact_id=contact_id, -client=client, - - )).parsed + return ( + await asyncio_detailed( + contact_id=contact_id, + client=client, + ) + ).parsed diff --git a/kindred-sdk/personal_crm_client/api/life_events/life_events_update_life_event.py b/kindred-sdk/personal_crm_client/api/life_events/life_events_update_life_event.py index 41de5cc7..5947187e 100644 --- a/kindred-sdk/personal_crm_client/api/life_events/life_events_update_life_event.py +++ b/kindred-sdk/personal_crm_client/api/life_events/life_events_update_life_event.py @@ -1,62 +1,51 @@ from http import HTTPStatus -from typing import Any, cast +from typing import Any from urllib.parse import quote +from uuid import UUID import httpx -from ...client import AuthenticatedClient, Client -from ...types import Response, UNSET from ... import errors - +from ...client import AuthenticatedClient, Client from ...models.http_validation_error import HTTPValidationError from ...models.life_event_public import LifeEventPublic from ...models.life_event_update import LifeEventUpdate -from typing import cast -from uuid import UUID - +from ...types import Response def _get_kwargs( event_id: UUID, *, body: LifeEventUpdate, - ) -> dict[str, Any]: headers: dict[str, Any] = {} - - - - - _kwargs: dict[str, Any] = { "method": "patch", - "url": "/api/v1/life-events/{event_id}".format(event_id=quote(str(event_id), safe=""),), + "url": "/api/v1/life-events/{event_id}".format( + event_id=quote(str(event_id), safe=""), + ), } _kwargs["json"] = body.to_dict() - headers["Content-Type"] = "application/json" _kwargs["headers"] = headers return _kwargs - -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> HTTPValidationError | LifeEventPublic | None: +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> HTTPValidationError | LifeEventPublic | None: if response.status_code == 200: response_200 = LifeEventPublic.from_dict(response.json()) - - return response_200 if response.status_code == 422: response_422 = HTTPValidationError.from_dict(response.json()) - - return response_422 if client.raise_on_unexpected_status: @@ -65,7 +54,9 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[HTTPValidationError | LifeEventPublic]: +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[HTTPValidationError | LifeEventPublic]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -79,9 +70,8 @@ def sync_detailed( *, client: AuthenticatedClient, body: LifeEventUpdate, - ) -> Response[HTTPValidationError | LifeEventPublic]: - """ Update Life Event + """Update Life Event Update a life event. @@ -95,13 +85,11 @@ def sync_detailed( Returns: Response[HTTPValidationError | LifeEventPublic] - """ - + """ kwargs = _get_kwargs( event_id=event_id, -body=body, - + body=body, ) response = client.get_httpx_client().request( @@ -110,14 +98,14 @@ def sync_detailed( return _build_response(client=client, response=response) + def sync( event_id: UUID, *, client: AuthenticatedClient, body: LifeEventUpdate, - ) -> HTTPValidationError | LifeEventPublic | None: - """ Update Life Event + """Update Life Event Update a life event. @@ -131,24 +119,22 @@ def sync( Returns: HTTPValidationError | LifeEventPublic - """ - + """ return sync_detailed( event_id=event_id, -client=client, -body=body, - + client=client, + body=body, ).parsed + async def asyncio_detailed( event_id: UUID, *, client: AuthenticatedClient, body: LifeEventUpdate, - ) -> Response[HTTPValidationError | LifeEventPublic]: - """ Update Life Event + """Update Life Event Update a life event. @@ -162,29 +148,25 @@ async def asyncio_detailed( Returns: Response[HTTPValidationError | LifeEventPublic] - """ - + """ kwargs = _get_kwargs( event_id=event_id, -body=body, - + body=body, ) - response = await client.get_async_httpx_client().request( - **kwargs - ) + response = await client.get_async_httpx_client().request(**kwargs) return _build_response(client=client, response=response) + async def asyncio( event_id: UUID, *, client: AuthenticatedClient, body: LifeEventUpdate, - ) -> HTTPValidationError | LifeEventPublic | None: - """ Update Life Event + """Update Life Event Update a life event. @@ -198,12 +180,12 @@ async def asyncio( Returns: HTTPValidationError | LifeEventPublic - """ - - - return (await asyncio_detailed( - event_id=event_id, -client=client, -body=body, - - )).parsed + """ + + return ( + await asyncio_detailed( + event_id=event_id, + client=client, + body=body, + ) + ).parsed diff --git a/kindred-sdk/personal_crm_client/api/login/__init__.py b/kindred-sdk/personal_crm_client/api/login/__init__.py index c9921b5f..2d7c0b23 100644 --- a/kindred-sdk/personal_crm_client/api/login/__init__.py +++ b/kindred-sdk/personal_crm_client/api/login/__init__.py @@ -1 +1 @@ -""" Contains endpoint functions for accessing the API """ +"""Contains endpoint functions for accessing the API""" diff --git a/kindred-sdk/personal_crm_client/api/login/login_login_access_token.py b/kindred-sdk/personal_crm_client/api/login/login_login_access_token.py index f0ba8702..951bd218 100644 --- a/kindred-sdk/personal_crm_client/api/login/login_login_access_token.py +++ b/kindred-sdk/personal_crm_client/api/login/login_login_access_token.py @@ -1,32 +1,22 @@ from http import HTTPStatus -from typing import Any, cast -from urllib.parse import quote +from typing import Any import httpx -from ...client import AuthenticatedClient, Client -from ...types import Response, UNSET from ... import errors - +from ...client import AuthenticatedClient, Client from ...models.body_login_login_access_token import BodyLoginLoginAccessToken from ...models.http_validation_error import HTTPValidationError from ...models.token import Token -from typing import cast - +from ...types import Response def _get_kwargs( *, body: BodyLoginLoginAccessToken, - ) -> dict[str, Any]: headers: dict[str, Any] = {} - - - - - _kwargs: dict[str, Any] = { "method": "post", "url": "/api/v1/login/access-token", @@ -40,20 +30,17 @@ def _get_kwargs( return _kwargs - -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> HTTPValidationError | Token | None: +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> HTTPValidationError | Token | None: if response.status_code == 200: response_200 = Token.from_dict(response.json()) - - return response_200 if response.status_code == 422: response_422 = HTTPValidationError.from_dict(response.json()) - - return response_422 if client.raise_on_unexpected_status: @@ -62,7 +49,9 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[HTTPValidationError | Token]: +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[HTTPValidationError | Token]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -75,9 +64,8 @@ def sync_detailed( *, client: AuthenticatedClient | Client, body: BodyLoginLoginAccessToken, - ) -> Response[HTTPValidationError | Token]: - """ Login Access Token + """Login Access Token OAuth2 compatible token login, get an access token for future requests @@ -90,12 +78,10 @@ def sync_detailed( Returns: Response[HTTPValidationError | Token] - """ - + """ kwargs = _get_kwargs( body=body, - ) response = client.get_httpx_client().request( @@ -104,13 +90,13 @@ def sync_detailed( return _build_response(client=client, response=response) + def sync( *, client: AuthenticatedClient | Client, body: BodyLoginLoginAccessToken, - ) -> HTTPValidationError | Token | None: - """ Login Access Token + """Login Access Token OAuth2 compatible token login, get an access token for future requests @@ -123,22 +109,20 @@ def sync( Returns: HTTPValidationError | Token - """ - + """ return sync_detailed( client=client, -body=body, - + body=body, ).parsed + async def asyncio_detailed( *, client: AuthenticatedClient | Client, body: BodyLoginLoginAccessToken, - ) -> Response[HTTPValidationError | Token]: - """ Login Access Token + """Login Access Token OAuth2 compatible token login, get an access token for future requests @@ -151,27 +135,23 @@ async def asyncio_detailed( Returns: Response[HTTPValidationError | Token] - """ - + """ kwargs = _get_kwargs( body=body, - ) - response = await client.get_async_httpx_client().request( - **kwargs - ) + response = await client.get_async_httpx_client().request(**kwargs) return _build_response(client=client, response=response) + async def asyncio( *, client: AuthenticatedClient | Client, body: BodyLoginLoginAccessToken, - ) -> HTTPValidationError | Token | None: - """ Login Access Token + """Login Access Token OAuth2 compatible token login, get an access token for future requests @@ -184,11 +164,11 @@ async def asyncio( Returns: HTTPValidationError | Token - """ + """ - - return (await asyncio_detailed( - client=client, -body=body, - - )).parsed + return ( + await asyncio_detailed( + client=client, + body=body, + ) + ).parsed diff --git a/kindred-sdk/personal_crm_client/api/login/login_recover_password.py b/kindred-sdk/personal_crm_client/api/login/login_recover_password.py index fa3efeef..b3215940 100644 --- a/kindred-sdk/personal_crm_client/api/login/login_recover_password.py +++ b/kindred-sdk/personal_crm_client/api/login/login_recover_password.py @@ -1,52 +1,40 @@ from http import HTTPStatus -from typing import Any, cast +from typing import Any from urllib.parse import quote import httpx -from ...client import AuthenticatedClient, Client -from ...types import Response, UNSET from ... import errors - +from ...client import AuthenticatedClient, Client from ...models.http_validation_error import HTTPValidationError from ...models.message import Message -from typing import cast - +from ...types import Response def _get_kwargs( email: str, - ) -> dict[str, Any]: - - - - - - _kwargs: dict[str, Any] = { "method": "post", - "url": "/api/v1/password-recovery/{email}".format(email=quote(str(email), safe=""),), + "url": "/api/v1/password-recovery/{email}".format( + email=quote(str(email), safe=""), + ), } - return _kwargs - -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> HTTPValidationError | Message | None: +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> HTTPValidationError | Message | None: if response.status_code == 200: response_200 = Message.from_dict(response.json()) - - return response_200 if response.status_code == 422: response_422 = HTTPValidationError.from_dict(response.json()) - - return response_422 if client.raise_on_unexpected_status: @@ -55,7 +43,9 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[HTTPValidationError | Message]: +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[HTTPValidationError | Message]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -68,9 +58,8 @@ def sync_detailed( email: str, *, client: AuthenticatedClient | Client, - ) -> Response[HTTPValidationError | Message]: - """ Recover Password + """Recover Password Password Recovery @@ -83,12 +72,10 @@ def sync_detailed( Returns: Response[HTTPValidationError | Message] - """ - + """ kwargs = _get_kwargs( email=email, - ) response = client.get_httpx_client().request( @@ -97,13 +84,13 @@ def sync_detailed( return _build_response(client=client, response=response) + def sync( email: str, *, client: AuthenticatedClient | Client, - ) -> HTTPValidationError | Message | None: - """ Recover Password + """Recover Password Password Recovery @@ -116,22 +103,20 @@ def sync( Returns: HTTPValidationError | Message - """ - + """ return sync_detailed( email=email, -client=client, - + client=client, ).parsed + async def asyncio_detailed( email: str, *, client: AuthenticatedClient | Client, - ) -> Response[HTTPValidationError | Message]: - """ Recover Password + """Recover Password Password Recovery @@ -144,27 +129,23 @@ async def asyncio_detailed( Returns: Response[HTTPValidationError | Message] - """ - + """ kwargs = _get_kwargs( email=email, - ) - response = await client.get_async_httpx_client().request( - **kwargs - ) + response = await client.get_async_httpx_client().request(**kwargs) return _build_response(client=client, response=response) + async def asyncio( email: str, *, client: AuthenticatedClient | Client, - ) -> HTTPValidationError | Message | None: - """ Recover Password + """Recover Password Password Recovery @@ -177,11 +158,11 @@ async def asyncio( Returns: HTTPValidationError | Message - """ + """ - - return (await asyncio_detailed( - email=email, -client=client, - - )).parsed + return ( + await asyncio_detailed( + email=email, + client=client, + ) + ).parsed diff --git a/kindred-sdk/personal_crm_client/api/login/login_recover_password_html_content.py b/kindred-sdk/personal_crm_client/api/login/login_recover_password_html_content.py index ef8c7643..ff00f949 100644 --- a/kindred-sdk/personal_crm_client/api/login/login_recover_password_html_content.py +++ b/kindred-sdk/personal_crm_client/api/login/login_recover_password_html_content.py @@ -1,39 +1,31 @@ from http import HTTPStatus -from typing import Any, cast +from typing import Any from urllib.parse import quote import httpx -from ...client import AuthenticatedClient, Client -from ...types import Response, UNSET from ... import errors - +from ...client import AuthenticatedClient, Client from ...models.http_validation_error import HTTPValidationError -from typing import cast - +from ...types import Response def _get_kwargs( email: str, - ) -> dict[str, Any]: - - - - - - _kwargs: dict[str, Any] = { "method": "post", - "url": "/api/v1/password-recovery-html-content/{email}".format(email=quote(str(email), safe=""),), + "url": "/api/v1/password-recovery-html-content/{email}".format( + email=quote(str(email), safe=""), + ), } - return _kwargs - -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> HTTPValidationError | str | None: +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> HTTPValidationError | str | None: if response.status_code == 200: response_200 = response.text return response_200 @@ -41,8 +33,6 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res if response.status_code == 422: response_422 = HTTPValidationError.from_dict(response.json()) - - return response_422 if client.raise_on_unexpected_status: @@ -51,7 +41,9 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[HTTPValidationError | str]: +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[HTTPValidationError | str]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -64,9 +56,8 @@ def sync_detailed( email: str, *, client: AuthenticatedClient, - ) -> Response[HTTPValidationError | str]: - """ Recover Password Html Content + """Recover Password Html Content HTML Content for Password Recovery @@ -79,12 +70,10 @@ def sync_detailed( Returns: Response[HTTPValidationError | str] - """ - + """ kwargs = _get_kwargs( email=email, - ) response = client.get_httpx_client().request( @@ -93,13 +82,13 @@ def sync_detailed( return _build_response(client=client, response=response) + def sync( email: str, *, client: AuthenticatedClient, - ) -> HTTPValidationError | str | None: - """ Recover Password Html Content + """Recover Password Html Content HTML Content for Password Recovery @@ -112,22 +101,20 @@ def sync( Returns: HTTPValidationError | str - """ - + """ return sync_detailed( email=email, -client=client, - + client=client, ).parsed + async def asyncio_detailed( email: str, *, client: AuthenticatedClient, - ) -> Response[HTTPValidationError | str]: - """ Recover Password Html Content + """Recover Password Html Content HTML Content for Password Recovery @@ -140,27 +127,23 @@ async def asyncio_detailed( Returns: Response[HTTPValidationError | str] - """ - + """ kwargs = _get_kwargs( email=email, - ) - response = await client.get_async_httpx_client().request( - **kwargs - ) + response = await client.get_async_httpx_client().request(**kwargs) return _build_response(client=client, response=response) + async def asyncio( email: str, *, client: AuthenticatedClient, - ) -> HTTPValidationError | str | None: - """ Recover Password Html Content + """Recover Password Html Content HTML Content for Password Recovery @@ -173,11 +156,11 @@ async def asyncio( Returns: HTTPValidationError | str - """ + """ - - return (await asyncio_detailed( - email=email, -client=client, - - )).parsed + return ( + await asyncio_detailed( + email=email, + client=client, + ) + ).parsed diff --git a/kindred-sdk/personal_crm_client/api/login/login_reset_password.py b/kindred-sdk/personal_crm_client/api/login/login_reset_password.py index 91f700e5..ee5d1cb8 100644 --- a/kindred-sdk/personal_crm_client/api/login/login_reset_password.py +++ b/kindred-sdk/personal_crm_client/api/login/login_reset_password.py @@ -1,32 +1,22 @@ from http import HTTPStatus -from typing import Any, cast -from urllib.parse import quote +from typing import Any import httpx -from ...client import AuthenticatedClient, Client -from ...types import Response, UNSET from ... import errors - +from ...client import AuthenticatedClient, Client from ...models.http_validation_error import HTTPValidationError from ...models.message import Message from ...models.new_password import NewPassword -from typing import cast - +from ...types import Response def _get_kwargs( *, body: NewPassword, - ) -> dict[str, Any]: headers: dict[str, Any] = {} - - - - - _kwargs: dict[str, Any] = { "method": "post", "url": "/api/v1/reset-password/", @@ -34,27 +24,23 @@ def _get_kwargs( _kwargs["json"] = body.to_dict() - headers["Content-Type"] = "application/json" _kwargs["headers"] = headers return _kwargs - -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> HTTPValidationError | Message | None: +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> HTTPValidationError | Message | None: if response.status_code == 200: response_200 = Message.from_dict(response.json()) - - return response_200 if response.status_code == 422: response_422 = HTTPValidationError.from_dict(response.json()) - - return response_422 if client.raise_on_unexpected_status: @@ -63,7 +49,9 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[HTTPValidationError | Message]: +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[HTTPValidationError | Message]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -76,9 +64,8 @@ def sync_detailed( *, client: AuthenticatedClient | Client, body: NewPassword, - ) -> Response[HTTPValidationError | Message]: - """ Reset Password + """Reset Password Reset password @@ -91,12 +78,10 @@ def sync_detailed( Returns: Response[HTTPValidationError | Message] - """ - + """ kwargs = _get_kwargs( body=body, - ) response = client.get_httpx_client().request( @@ -105,13 +90,13 @@ def sync_detailed( return _build_response(client=client, response=response) + def sync( *, client: AuthenticatedClient | Client, body: NewPassword, - ) -> HTTPValidationError | Message | None: - """ Reset Password + """Reset Password Reset password @@ -124,22 +109,20 @@ def sync( Returns: HTTPValidationError | Message - """ - + """ return sync_detailed( client=client, -body=body, - + body=body, ).parsed + async def asyncio_detailed( *, client: AuthenticatedClient | Client, body: NewPassword, - ) -> Response[HTTPValidationError | Message]: - """ Reset Password + """Reset Password Reset password @@ -152,27 +135,23 @@ async def asyncio_detailed( Returns: Response[HTTPValidationError | Message] - """ - + """ kwargs = _get_kwargs( body=body, - ) - response = await client.get_async_httpx_client().request( - **kwargs - ) + response = await client.get_async_httpx_client().request(**kwargs) return _build_response(client=client, response=response) + async def asyncio( *, client: AuthenticatedClient | Client, body: NewPassword, - ) -> HTTPValidationError | Message | None: - """ Reset Password + """Reset Password Reset password @@ -185,11 +164,11 @@ async def asyncio( Returns: HTTPValidationError | Message - """ + """ - - return (await asyncio_detailed( - client=client, -body=body, - - )).parsed + return ( + await asyncio_detailed( + client=client, + body=body, + ) + ).parsed diff --git a/kindred-sdk/personal_crm_client/api/login/login_test_token.py b/kindred-sdk/personal_crm_client/api/login/login_test_token.py index 4a87d2c7..d12082df 100644 --- a/kindred-sdk/personal_crm_client/api/login/login_test_token.py +++ b/kindred-sdk/personal_crm_client/api/login/login_test_token.py @@ -1,43 +1,27 @@ from http import HTTPStatus -from typing import Any, cast -from urllib.parse import quote +from typing import Any import httpx -from ...client import AuthenticatedClient, Client -from ...types import Response, UNSET from ... import errors - +from ...client import AuthenticatedClient, Client from ...models.user_public import UserPublic -from typing import cast - +from ...types import Response -def _get_kwargs( - -) -> dict[str, Any]: - - - - - - +def _get_kwargs() -> dict[str, Any]: _kwargs: dict[str, Any] = { "method": "post", "url": "/api/v1/login/test-token", } - return _kwargs - def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> UserPublic | None: if response.status_code == 200: response_200 = UserPublic.from_dict(response.json()) - - return response_200 if client.raise_on_unexpected_status: @@ -58,9 +42,8 @@ def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Res def sync_detailed( *, client: AuthenticatedClient, - ) -> Response[UserPublic]: - """ Test Token + """Test Token Test access token @@ -70,12 +53,9 @@ def sync_detailed( Returns: Response[UserPublic] - """ + """ - - kwargs = _get_kwargs( - - ) + kwargs = _get_kwargs() response = client.get_httpx_client().request( **kwargs, @@ -83,12 +63,12 @@ def sync_detailed( return _build_response(client=client, response=response) + def sync( *, client: AuthenticatedClient, - ) -> UserPublic | None: - """ Test Token + """Test Token Test access token @@ -98,20 +78,18 @@ def sync( Returns: UserPublic - """ - + """ return sync_detailed( client=client, - ).parsed + async def asyncio_detailed( *, client: AuthenticatedClient, - ) -> Response[UserPublic]: - """ Test Token + """Test Token Test access token @@ -121,25 +99,20 @@ async def asyncio_detailed( Returns: Response[UserPublic] - """ - + """ - kwargs = _get_kwargs( - - ) + kwargs = _get_kwargs() - response = await client.get_async_httpx_client().request( - **kwargs - ) + response = await client.get_async_httpx_client().request(**kwargs) return _build_response(client=client, response=response) + async def asyncio( *, client: AuthenticatedClient, - ) -> UserPublic | None: - """ Test Token + """Test Token Test access token @@ -149,10 +122,10 @@ async def asyncio( Returns: UserPublic - """ - + """ - return (await asyncio_detailed( - client=client, - - )).parsed + return ( + await asyncio_detailed( + client=client, + ) + ).parsed diff --git a/kindred-sdk/personal_crm_client/api/media_recommendations/__init__.py b/kindred-sdk/personal_crm_client/api/media_recommendations/__init__.py index c9921b5f..2d7c0b23 100644 --- a/kindred-sdk/personal_crm_client/api/media_recommendations/__init__.py +++ b/kindred-sdk/personal_crm_client/api/media_recommendations/__init__.py @@ -1 +1 @@ -""" Contains endpoint functions for accessing the API """ +"""Contains endpoint functions for accessing the API""" diff --git a/kindred-sdk/personal_crm_client/api/media_recommendations/media_recommendations_create_media_recommendation_route.py b/kindred-sdk/personal_crm_client/api/media_recommendations/media_recommendations_create_media_recommendation_route.py index e71bc041..5d2e79c4 100644 --- a/kindred-sdk/personal_crm_client/api/media_recommendations/media_recommendations_create_media_recommendation_route.py +++ b/kindred-sdk/personal_crm_client/api/media_recommendations/media_recommendations_create_media_recommendation_route.py @@ -1,32 +1,22 @@ from http import HTTPStatus -from typing import Any, cast -from urllib.parse import quote +from typing import Any import httpx -from ...client import AuthenticatedClient, Client -from ...types import Response, UNSET from ... import errors - +from ...client import AuthenticatedClient, Client from ...models.http_validation_error import HTTPValidationError from ...models.media_recommendation_create import MediaRecommendationCreate from ...models.media_recommendation_public import MediaRecommendationPublic -from typing import cast - +from ...types import Response def _get_kwargs( *, body: MediaRecommendationCreate, - ) -> dict[str, Any]: headers: dict[str, Any] = {} - - - - - _kwargs: dict[str, Any] = { "method": "post", "url": "/api/v1/media-recommendations/", @@ -34,27 +24,23 @@ def _get_kwargs( _kwargs["json"] = body.to_dict() - headers["Content-Type"] = "application/json" _kwargs["headers"] = headers return _kwargs - -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> HTTPValidationError | MediaRecommendationPublic | None: +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> HTTPValidationError | MediaRecommendationPublic | None: if response.status_code == 200: response_200 = MediaRecommendationPublic.from_dict(response.json()) - - return response_200 if response.status_code == 422: response_422 = HTTPValidationError.from_dict(response.json()) - - return response_422 if client.raise_on_unexpected_status: @@ -63,7 +49,9 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[HTTPValidationError | MediaRecommendationPublic]: +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[HTTPValidationError | MediaRecommendationPublic]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -76,9 +64,8 @@ def sync_detailed( *, client: AuthenticatedClient, body: MediaRecommendationCreate, - ) -> Response[HTTPValidationError | MediaRecommendationPublic]: - """ Create Media Recommendation Route + """Create Media Recommendation Route Create a new media recommendation. @@ -91,12 +78,10 @@ def sync_detailed( Returns: Response[HTTPValidationError | MediaRecommendationPublic] - """ - + """ kwargs = _get_kwargs( body=body, - ) response = client.get_httpx_client().request( @@ -105,13 +90,13 @@ def sync_detailed( return _build_response(client=client, response=response) + def sync( *, client: AuthenticatedClient, body: MediaRecommendationCreate, - ) -> HTTPValidationError | MediaRecommendationPublic | None: - """ Create Media Recommendation Route + """Create Media Recommendation Route Create a new media recommendation. @@ -124,22 +109,20 @@ def sync( Returns: HTTPValidationError | MediaRecommendationPublic - """ - + """ return sync_detailed( client=client, -body=body, - + body=body, ).parsed + async def asyncio_detailed( *, client: AuthenticatedClient, body: MediaRecommendationCreate, - ) -> Response[HTTPValidationError | MediaRecommendationPublic]: - """ Create Media Recommendation Route + """Create Media Recommendation Route Create a new media recommendation. @@ -152,27 +135,23 @@ async def asyncio_detailed( Returns: Response[HTTPValidationError | MediaRecommendationPublic] - """ - + """ kwargs = _get_kwargs( body=body, - ) - response = await client.get_async_httpx_client().request( - **kwargs - ) + response = await client.get_async_httpx_client().request(**kwargs) return _build_response(client=client, response=response) + async def asyncio( *, client: AuthenticatedClient, body: MediaRecommendationCreate, - ) -> HTTPValidationError | MediaRecommendationPublic | None: - """ Create Media Recommendation Route + """Create Media Recommendation Route Create a new media recommendation. @@ -185,11 +164,11 @@ async def asyncio( Returns: HTTPValidationError | MediaRecommendationPublic - """ + """ - - return (await asyncio_detailed( - client=client, -body=body, - - )).parsed + return ( + await asyncio_detailed( + client=client, + body=body, + ) + ).parsed diff --git a/kindred-sdk/personal_crm_client/api/media_recommendations/media_recommendations_delete_media_recommendation.py b/kindred-sdk/personal_crm_client/api/media_recommendations/media_recommendations_delete_media_recommendation.py index 634ea53c..ff342a46 100644 --- a/kindred-sdk/personal_crm_client/api/media_recommendations/media_recommendations_delete_media_recommendation.py +++ b/kindred-sdk/personal_crm_client/api/media_recommendations/media_recommendations_delete_media_recommendation.py @@ -1,40 +1,32 @@ from http import HTTPStatus -from typing import Any, cast +from typing import Any from urllib.parse import quote +from uuid import UUID import httpx -from ...client import AuthenticatedClient, Client -from ...types import Response, UNSET from ... import errors - +from ...client import AuthenticatedClient, Client from ...models.http_validation_error import HTTPValidationError -from typing import cast -from uuid import UUID - +from ...types import Response def _get_kwargs( rec_id: UUID, - ) -> dict[str, Any]: - - - - - - _kwargs: dict[str, Any] = { "method": "delete", - "url": "/api/v1/media-recommendations/{rec_id}".format(rec_id=quote(str(rec_id), safe=""),), + "url": "/api/v1/media-recommendations/{rec_id}".format( + rec_id=quote(str(rec_id), safe=""), + ), } - return _kwargs - -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Any | HTTPValidationError | None: +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Any | HTTPValidationError | None: if response.status_code == 200: response_200 = response.json() return response_200 @@ -42,8 +34,6 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res if response.status_code == 422: response_422 = HTTPValidationError.from_dict(response.json()) - - return response_422 if client.raise_on_unexpected_status: @@ -52,7 +42,9 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[Any | HTTPValidationError]: +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[Any | HTTPValidationError]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -65,9 +57,8 @@ def sync_detailed( rec_id: UUID, *, client: AuthenticatedClient, - ) -> Response[Any | HTTPValidationError]: - """ Delete Media Recommendation + """Delete Media Recommendation Delete a media recommendation. @@ -80,12 +71,10 @@ def sync_detailed( Returns: Response[Any | HTTPValidationError] - """ - + """ kwargs = _get_kwargs( rec_id=rec_id, - ) response = client.get_httpx_client().request( @@ -94,13 +83,13 @@ def sync_detailed( return _build_response(client=client, response=response) + def sync( rec_id: UUID, *, client: AuthenticatedClient, - ) -> Any | HTTPValidationError | None: - """ Delete Media Recommendation + """Delete Media Recommendation Delete a media recommendation. @@ -113,22 +102,20 @@ def sync( Returns: Any | HTTPValidationError - """ - + """ return sync_detailed( rec_id=rec_id, -client=client, - + client=client, ).parsed + async def asyncio_detailed( rec_id: UUID, *, client: AuthenticatedClient, - ) -> Response[Any | HTTPValidationError]: - """ Delete Media Recommendation + """Delete Media Recommendation Delete a media recommendation. @@ -141,27 +128,23 @@ async def asyncio_detailed( Returns: Response[Any | HTTPValidationError] - """ - + """ kwargs = _get_kwargs( rec_id=rec_id, - ) - response = await client.get_async_httpx_client().request( - **kwargs - ) + response = await client.get_async_httpx_client().request(**kwargs) return _build_response(client=client, response=response) + async def asyncio( rec_id: UUID, *, client: AuthenticatedClient, - ) -> Any | HTTPValidationError | None: - """ Delete Media Recommendation + """Delete Media Recommendation Delete a media recommendation. @@ -174,11 +157,11 @@ async def asyncio( Returns: Any | HTTPValidationError - """ + """ - - return (await asyncio_detailed( - rec_id=rec_id, -client=client, - - )).parsed + return ( + await asyncio_detailed( + rec_id=rec_id, + client=client, + ) + ).parsed diff --git a/kindred-sdk/personal_crm_client/api/media_recommendations/media_recommendations_list_media_recommendations.py b/kindred-sdk/personal_crm_client/api/media_recommendations/media_recommendations_list_media_recommendations.py index 596ba7b8..2829bbd3 100644 --- a/kindred-sdk/personal_crm_client/api/media_recommendations/media_recommendations_list_media_recommendations.py +++ b/kindred-sdk/personal_crm_client/api/media_recommendations/media_recommendations_list_media_recommendations.py @@ -1,53 +1,41 @@ from http import HTTPStatus -from typing import Any, cast +from typing import Any from urllib.parse import quote +from uuid import UUID import httpx -from ...client import AuthenticatedClient, Client -from ...types import Response, UNSET from ... import errors - +from ...client import AuthenticatedClient, Client from ...models.http_validation_error import HTTPValidationError from ...models.media_recommendations_public import MediaRecommendationsPublic -from typing import cast -from uuid import UUID - +from ...types import Response def _get_kwargs( contact_id: UUID, - ) -> dict[str, Any]: - - - - - - _kwargs: dict[str, Any] = { "method": "get", - "url": "/api/v1/media-recommendations/contact/{contact_id}".format(contact_id=quote(str(contact_id), safe=""),), + "url": "/api/v1/media-recommendations/contact/{contact_id}".format( + contact_id=quote(str(contact_id), safe=""), + ), } - return _kwargs - -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> HTTPValidationError | MediaRecommendationsPublic | None: +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> HTTPValidationError | MediaRecommendationsPublic | None: if response.status_code == 200: response_200 = MediaRecommendationsPublic.from_dict(response.json()) - - return response_200 if response.status_code == 422: response_422 = HTTPValidationError.from_dict(response.json()) - - return response_422 if client.raise_on_unexpected_status: @@ -56,7 +44,9 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[HTTPValidationError | MediaRecommendationsPublic]: +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[HTTPValidationError | MediaRecommendationsPublic]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -69,9 +59,8 @@ def sync_detailed( contact_id: UUID, *, client: AuthenticatedClient, - ) -> Response[HTTPValidationError | MediaRecommendationsPublic]: - """ List Media Recommendations + """List Media Recommendations List media recommendations for a contact. @@ -84,12 +73,10 @@ def sync_detailed( Returns: Response[HTTPValidationError | MediaRecommendationsPublic] - """ - + """ kwargs = _get_kwargs( contact_id=contact_id, - ) response = client.get_httpx_client().request( @@ -98,13 +85,13 @@ def sync_detailed( return _build_response(client=client, response=response) + def sync( contact_id: UUID, *, client: AuthenticatedClient, - ) -> HTTPValidationError | MediaRecommendationsPublic | None: - """ List Media Recommendations + """List Media Recommendations List media recommendations for a contact. @@ -117,22 +104,20 @@ def sync( Returns: HTTPValidationError | MediaRecommendationsPublic - """ - + """ return sync_detailed( contact_id=contact_id, -client=client, - + client=client, ).parsed + async def asyncio_detailed( contact_id: UUID, *, client: AuthenticatedClient, - ) -> Response[HTTPValidationError | MediaRecommendationsPublic]: - """ List Media Recommendations + """List Media Recommendations List media recommendations for a contact. @@ -145,27 +130,23 @@ async def asyncio_detailed( Returns: Response[HTTPValidationError | MediaRecommendationsPublic] - """ - + """ kwargs = _get_kwargs( contact_id=contact_id, - ) - response = await client.get_async_httpx_client().request( - **kwargs - ) + response = await client.get_async_httpx_client().request(**kwargs) return _build_response(client=client, response=response) + async def asyncio( contact_id: UUID, *, client: AuthenticatedClient, - ) -> HTTPValidationError | MediaRecommendationsPublic | None: - """ List Media Recommendations + """List Media Recommendations List media recommendations for a contact. @@ -178,11 +159,11 @@ async def asyncio( Returns: HTTPValidationError | MediaRecommendationsPublic - """ + """ - - return (await asyncio_detailed( - contact_id=contact_id, -client=client, - - )).parsed + return ( + await asyncio_detailed( + contact_id=contact_id, + client=client, + ) + ).parsed diff --git a/kindred-sdk/personal_crm_client/api/media_recommendations/media_recommendations_update_media_recommendation.py b/kindred-sdk/personal_crm_client/api/media_recommendations/media_recommendations_update_media_recommendation.py index 17fbe4f7..8346cb76 100644 --- a/kindred-sdk/personal_crm_client/api/media_recommendations/media_recommendations_update_media_recommendation.py +++ b/kindred-sdk/personal_crm_client/api/media_recommendations/media_recommendations_update_media_recommendation.py @@ -1,62 +1,51 @@ from http import HTTPStatus -from typing import Any, cast +from typing import Any from urllib.parse import quote +from uuid import UUID import httpx -from ...client import AuthenticatedClient, Client -from ...types import Response, UNSET from ... import errors - +from ...client import AuthenticatedClient, Client from ...models.http_validation_error import HTTPValidationError from ...models.media_recommendation_public import MediaRecommendationPublic from ...models.media_recommendation_update import MediaRecommendationUpdate -from typing import cast -from uuid import UUID - +from ...types import Response def _get_kwargs( rec_id: UUID, *, body: MediaRecommendationUpdate, - ) -> dict[str, Any]: headers: dict[str, Any] = {} - - - - - _kwargs: dict[str, Any] = { "method": "patch", - "url": "/api/v1/media-recommendations/{rec_id}".format(rec_id=quote(str(rec_id), safe=""),), + "url": "/api/v1/media-recommendations/{rec_id}".format( + rec_id=quote(str(rec_id), safe=""), + ), } _kwargs["json"] = body.to_dict() - headers["Content-Type"] = "application/json" _kwargs["headers"] = headers return _kwargs - -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> HTTPValidationError | MediaRecommendationPublic | None: +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> HTTPValidationError | MediaRecommendationPublic | None: if response.status_code == 200: response_200 = MediaRecommendationPublic.from_dict(response.json()) - - return response_200 if response.status_code == 422: response_422 = HTTPValidationError.from_dict(response.json()) - - return response_422 if client.raise_on_unexpected_status: @@ -65,7 +54,9 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[HTTPValidationError | MediaRecommendationPublic]: +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[HTTPValidationError | MediaRecommendationPublic]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -79,9 +70,8 @@ def sync_detailed( *, client: AuthenticatedClient, body: MediaRecommendationUpdate, - ) -> Response[HTTPValidationError | MediaRecommendationPublic]: - """ Update Media Recommendation + """Update Media Recommendation Update a media recommendation. @@ -95,13 +85,11 @@ def sync_detailed( Returns: Response[HTTPValidationError | MediaRecommendationPublic] - """ - + """ kwargs = _get_kwargs( rec_id=rec_id, -body=body, - + body=body, ) response = client.get_httpx_client().request( @@ -110,14 +98,14 @@ def sync_detailed( return _build_response(client=client, response=response) + def sync( rec_id: UUID, *, client: AuthenticatedClient, body: MediaRecommendationUpdate, - ) -> HTTPValidationError | MediaRecommendationPublic | None: - """ Update Media Recommendation + """Update Media Recommendation Update a media recommendation. @@ -131,24 +119,22 @@ def sync( Returns: HTTPValidationError | MediaRecommendationPublic - """ - + """ return sync_detailed( rec_id=rec_id, -client=client, -body=body, - + client=client, + body=body, ).parsed + async def asyncio_detailed( rec_id: UUID, *, client: AuthenticatedClient, body: MediaRecommendationUpdate, - ) -> Response[HTTPValidationError | MediaRecommendationPublic]: - """ Update Media Recommendation + """Update Media Recommendation Update a media recommendation. @@ -162,29 +148,25 @@ async def asyncio_detailed( Returns: Response[HTTPValidationError | MediaRecommendationPublic] - """ - + """ kwargs = _get_kwargs( rec_id=rec_id, -body=body, - + body=body, ) - response = await client.get_async_httpx_client().request( - **kwargs - ) + response = await client.get_async_httpx_client().request(**kwargs) return _build_response(client=client, response=response) + async def asyncio( rec_id: UUID, *, client: AuthenticatedClient, body: MediaRecommendationUpdate, - ) -> HTTPValidationError | MediaRecommendationPublic | None: - """ Update Media Recommendation + """Update Media Recommendation Update a media recommendation. @@ -198,12 +180,12 @@ async def asyncio( Returns: HTTPValidationError | MediaRecommendationPublic - """ - - - return (await asyncio_detailed( - rec_id=rec_id, -client=client, -body=body, - - )).parsed + """ + + return ( + await asyncio_detailed( + rec_id=rec_id, + client=client, + body=body, + ) + ).parsed diff --git a/kindred-sdk/personal_crm_client/api/notes/__init__.py b/kindred-sdk/personal_crm_client/api/notes/__init__.py index c9921b5f..2d7c0b23 100644 --- a/kindred-sdk/personal_crm_client/api/notes/__init__.py +++ b/kindred-sdk/personal_crm_client/api/notes/__init__.py @@ -1 +1 @@ -""" Contains endpoint functions for accessing the API """ +"""Contains endpoint functions for accessing the API""" diff --git a/kindred-sdk/personal_crm_client/api/notes/notes_create_note_route.py b/kindred-sdk/personal_crm_client/api/notes/notes_create_note_route.py index f45f2a4d..7c008e07 100644 --- a/kindred-sdk/personal_crm_client/api/notes/notes_create_note_route.py +++ b/kindred-sdk/personal_crm_client/api/notes/notes_create_note_route.py @@ -1,32 +1,22 @@ from http import HTTPStatus -from typing import Any, cast -from urllib.parse import quote +from typing import Any import httpx -from ...client import AuthenticatedClient, Client -from ...types import Response, UNSET from ... import errors - +from ...client import AuthenticatedClient, Client from ...models.http_validation_error import HTTPValidationError from ...models.note_create import NoteCreate from ...models.note_public import NotePublic -from typing import cast - +from ...types import Response def _get_kwargs( *, body: NoteCreate, - ) -> dict[str, Any]: headers: dict[str, Any] = {} - - - - - _kwargs: dict[str, Any] = { "method": "post", "url": "/api/v1/notes/", @@ -34,27 +24,23 @@ def _get_kwargs( _kwargs["json"] = body.to_dict() - headers["Content-Type"] = "application/json" _kwargs["headers"] = headers return _kwargs - -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> HTTPValidationError | NotePublic | None: +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> HTTPValidationError | NotePublic | None: if response.status_code == 200: response_200 = NotePublic.from_dict(response.json()) - - return response_200 if response.status_code == 422: response_422 = HTTPValidationError.from_dict(response.json()) - - return response_422 if client.raise_on_unexpected_status: @@ -63,7 +49,9 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[HTTPValidationError | NotePublic]: +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[HTTPValidationError | NotePublic]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -76,9 +64,8 @@ def sync_detailed( *, client: AuthenticatedClient, body: NoteCreate, - ) -> Response[HTTPValidationError | NotePublic]: - """ Create Note Route + """Create Note Route Create a new note. @@ -91,12 +78,10 @@ def sync_detailed( Returns: Response[HTTPValidationError | NotePublic] - """ - + """ kwargs = _get_kwargs( body=body, - ) response = client.get_httpx_client().request( @@ -105,13 +90,13 @@ def sync_detailed( return _build_response(client=client, response=response) + def sync( *, client: AuthenticatedClient, body: NoteCreate, - ) -> HTTPValidationError | NotePublic | None: - """ Create Note Route + """Create Note Route Create a new note. @@ -124,22 +109,20 @@ def sync( Returns: HTTPValidationError | NotePublic - """ - + """ return sync_detailed( client=client, -body=body, - + body=body, ).parsed + async def asyncio_detailed( *, client: AuthenticatedClient, body: NoteCreate, - ) -> Response[HTTPValidationError | NotePublic]: - """ Create Note Route + """Create Note Route Create a new note. @@ -152,27 +135,23 @@ async def asyncio_detailed( Returns: Response[HTTPValidationError | NotePublic] - """ - + """ kwargs = _get_kwargs( body=body, - ) - response = await client.get_async_httpx_client().request( - **kwargs - ) + response = await client.get_async_httpx_client().request(**kwargs) return _build_response(client=client, response=response) + async def asyncio( *, client: AuthenticatedClient, body: NoteCreate, - ) -> HTTPValidationError | NotePublic | None: - """ Create Note Route + """Create Note Route Create a new note. @@ -185,11 +164,11 @@ async def asyncio( Returns: HTTPValidationError | NotePublic - """ + """ - - return (await asyncio_detailed( - client=client, -body=body, - - )).parsed + return ( + await asyncio_detailed( + client=client, + body=body, + ) + ).parsed diff --git a/kindred-sdk/personal_crm_client/api/notes/notes_delete_note.py b/kindred-sdk/personal_crm_client/api/notes/notes_delete_note.py index 30934c93..9c8c3ec4 100644 --- a/kindred-sdk/personal_crm_client/api/notes/notes_delete_note.py +++ b/kindred-sdk/personal_crm_client/api/notes/notes_delete_note.py @@ -1,40 +1,32 @@ from http import HTTPStatus -from typing import Any, cast +from typing import Any from urllib.parse import quote +from uuid import UUID import httpx -from ...client import AuthenticatedClient, Client -from ...types import Response, UNSET from ... import errors - +from ...client import AuthenticatedClient, Client from ...models.http_validation_error import HTTPValidationError -from typing import cast -from uuid import UUID - +from ...types import Response def _get_kwargs( note_id: UUID, - ) -> dict[str, Any]: - - - - - - _kwargs: dict[str, Any] = { "method": "delete", - "url": "/api/v1/notes/{note_id}".format(note_id=quote(str(note_id), safe=""),), + "url": "/api/v1/notes/{note_id}".format( + note_id=quote(str(note_id), safe=""), + ), } - return _kwargs - -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Any | HTTPValidationError | None: +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Any | HTTPValidationError | None: if response.status_code == 200: response_200 = response.json() return response_200 @@ -42,8 +34,6 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res if response.status_code == 422: response_422 = HTTPValidationError.from_dict(response.json()) - - return response_422 if client.raise_on_unexpected_status: @@ -52,7 +42,9 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[Any | HTTPValidationError]: +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[Any | HTTPValidationError]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -65,9 +57,8 @@ def sync_detailed( note_id: UUID, *, client: AuthenticatedClient, - ) -> Response[Any | HTTPValidationError]: - """ Delete Note + """Delete Note Delete a note. @@ -80,12 +71,10 @@ def sync_detailed( Returns: Response[Any | HTTPValidationError] - """ - + """ kwargs = _get_kwargs( note_id=note_id, - ) response = client.get_httpx_client().request( @@ -94,13 +83,13 @@ def sync_detailed( return _build_response(client=client, response=response) + def sync( note_id: UUID, *, client: AuthenticatedClient, - ) -> Any | HTTPValidationError | None: - """ Delete Note + """Delete Note Delete a note. @@ -113,22 +102,20 @@ def sync( Returns: Any | HTTPValidationError - """ - + """ return sync_detailed( note_id=note_id, -client=client, - + client=client, ).parsed + async def asyncio_detailed( note_id: UUID, *, client: AuthenticatedClient, - ) -> Response[Any | HTTPValidationError]: - """ Delete Note + """Delete Note Delete a note. @@ -141,27 +128,23 @@ async def asyncio_detailed( Returns: Response[Any | HTTPValidationError] - """ - + """ kwargs = _get_kwargs( note_id=note_id, - ) - response = await client.get_async_httpx_client().request( - **kwargs - ) + response = await client.get_async_httpx_client().request(**kwargs) return _build_response(client=client, response=response) + async def asyncio( note_id: UUID, *, client: AuthenticatedClient, - ) -> Any | HTTPValidationError | None: - """ Delete Note + """Delete Note Delete a note. @@ -174,11 +157,11 @@ async def asyncio( Returns: Any | HTTPValidationError - """ + """ - - return (await asyncio_detailed( - note_id=note_id, -client=client, - - )).parsed + return ( + await asyncio_detailed( + note_id=note_id, + client=client, + ) + ).parsed diff --git a/kindred-sdk/personal_crm_client/api/notes/notes_list_notes.py b/kindred-sdk/personal_crm_client/api/notes/notes_list_notes.py index 10756123..5028fe5c 100644 --- a/kindred-sdk/personal_crm_client/api/notes/notes_list_notes.py +++ b/kindred-sdk/personal_crm_client/api/notes/notes_list_notes.py @@ -1,19 +1,15 @@ from http import HTTPStatus -from typing import Any, cast +from typing import Any from urllib.parse import quote +from uuid import UUID import httpx -from ...client import AuthenticatedClient, Client -from ...types import Response, UNSET from ... import errors - +from ...client import AuthenticatedClient, Client from ...models.http_validation_error import HTTPValidationError from ...models.notes_public import NotesPublic -from ...types import UNSET, Unset -from typing import cast -from uuid import UUID - +from ...types import UNSET, Response, Unset def _get_kwargs( @@ -21,46 +17,37 @@ def _get_kwargs( *, skip: int | Unset = 0, limit: int | Unset = 100, - ) -> dict[str, Any]: - - - - params: dict[str, Any] = {} params["skip"] = skip params["limit"] = limit - params = {k: v for k, v in params.items() if v is not UNSET and v is not None} - _kwargs: dict[str, Any] = { "method": "get", - "url": "/api/v1/notes/contact/{contact_id}".format(contact_id=quote(str(contact_id), safe=""),), + "url": "/api/v1/notes/contact/{contact_id}".format( + contact_id=quote(str(contact_id), safe=""), + ), "params": params, } - return _kwargs - -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> HTTPValidationError | NotesPublic | None: +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> HTTPValidationError | NotesPublic | None: if response.status_code == 200: response_200 = NotesPublic.from_dict(response.json()) - - return response_200 if response.status_code == 422: response_422 = HTTPValidationError.from_dict(response.json()) - - return response_422 if client.raise_on_unexpected_status: @@ -69,7 +56,9 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[HTTPValidationError | NotesPublic]: +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[HTTPValidationError | NotesPublic]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -84,9 +73,8 @@ def sync_detailed( client: AuthenticatedClient, skip: int | Unset = 0, limit: int | Unset = 100, - ) -> Response[HTTPValidationError | NotesPublic]: - """ List Notes + """List Notes List notes for a contact. @@ -101,14 +89,12 @@ def sync_detailed( Returns: Response[HTTPValidationError | NotesPublic] - """ - + """ kwargs = _get_kwargs( contact_id=contact_id, -skip=skip, -limit=limit, - + skip=skip, + limit=limit, ) response = client.get_httpx_client().request( @@ -117,15 +103,15 @@ def sync_detailed( return _build_response(client=client, response=response) + def sync( contact_id: UUID, *, client: AuthenticatedClient, skip: int | Unset = 0, limit: int | Unset = 100, - ) -> HTTPValidationError | NotesPublic | None: - """ List Notes + """List Notes List notes for a contact. @@ -140,26 +126,24 @@ def sync( Returns: HTTPValidationError | NotesPublic - """ - + """ return sync_detailed( contact_id=contact_id, -client=client, -skip=skip, -limit=limit, - + client=client, + skip=skip, + limit=limit, ).parsed + async def asyncio_detailed( contact_id: UUID, *, client: AuthenticatedClient, skip: int | Unset = 0, limit: int | Unset = 100, - ) -> Response[HTTPValidationError | NotesPublic]: - """ List Notes + """List Notes List notes for a contact. @@ -174,31 +158,27 @@ async def asyncio_detailed( Returns: Response[HTTPValidationError | NotesPublic] - """ - + """ kwargs = _get_kwargs( contact_id=contact_id, -skip=skip, -limit=limit, - + skip=skip, + limit=limit, ) - response = await client.get_async_httpx_client().request( - **kwargs - ) + response = await client.get_async_httpx_client().request(**kwargs) return _build_response(client=client, response=response) + async def asyncio( contact_id: UUID, *, client: AuthenticatedClient, skip: int | Unset = 0, limit: int | Unset = 100, - ) -> HTTPValidationError | NotesPublic | None: - """ List Notes + """List Notes List notes for a contact. @@ -213,13 +193,13 @@ async def asyncio( Returns: HTTPValidationError | NotesPublic - """ - - - return (await asyncio_detailed( - contact_id=contact_id, -client=client, -skip=skip, -limit=limit, - - )).parsed + """ + + return ( + await asyncio_detailed( + contact_id=contact_id, + client=client, + skip=skip, + limit=limit, + ) + ).parsed diff --git a/kindred-sdk/personal_crm_client/api/notes/notes_update_note_route.py b/kindred-sdk/personal_crm_client/api/notes/notes_update_note_route.py index 0c46ae01..9f23fc9f 100644 --- a/kindred-sdk/personal_crm_client/api/notes/notes_update_note_route.py +++ b/kindred-sdk/personal_crm_client/api/notes/notes_update_note_route.py @@ -1,62 +1,51 @@ from http import HTTPStatus -from typing import Any, cast +from typing import Any from urllib.parse import quote +from uuid import UUID import httpx -from ...client import AuthenticatedClient, Client -from ...types import Response, UNSET from ... import errors - +from ...client import AuthenticatedClient, Client from ...models.http_validation_error import HTTPValidationError from ...models.note_public import NotePublic from ...models.note_update import NoteUpdate -from typing import cast -from uuid import UUID - +from ...types import Response def _get_kwargs( note_id: UUID, *, body: NoteUpdate, - ) -> dict[str, Any]: headers: dict[str, Any] = {} - - - - - _kwargs: dict[str, Any] = { "method": "patch", - "url": "/api/v1/notes/{note_id}".format(note_id=quote(str(note_id), safe=""),), + "url": "/api/v1/notes/{note_id}".format( + note_id=quote(str(note_id), safe=""), + ), } _kwargs["json"] = body.to_dict() - headers["Content-Type"] = "application/json" _kwargs["headers"] = headers return _kwargs - -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> HTTPValidationError | NotePublic | None: +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> HTTPValidationError | NotePublic | None: if response.status_code == 200: response_200 = NotePublic.from_dict(response.json()) - - return response_200 if response.status_code == 422: response_422 = HTTPValidationError.from_dict(response.json()) - - return response_422 if client.raise_on_unexpected_status: @@ -65,7 +54,9 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[HTTPValidationError | NotePublic]: +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[HTTPValidationError | NotePublic]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -79,9 +70,8 @@ def sync_detailed( *, client: AuthenticatedClient, body: NoteUpdate, - ) -> Response[HTTPValidationError | NotePublic]: - """ Update Note Route + """Update Note Route Update a note. @@ -95,13 +85,11 @@ def sync_detailed( Returns: Response[HTTPValidationError | NotePublic] - """ - + """ kwargs = _get_kwargs( note_id=note_id, -body=body, - + body=body, ) response = client.get_httpx_client().request( @@ -110,14 +98,14 @@ def sync_detailed( return _build_response(client=client, response=response) + def sync( note_id: UUID, *, client: AuthenticatedClient, body: NoteUpdate, - ) -> HTTPValidationError | NotePublic | None: - """ Update Note Route + """Update Note Route Update a note. @@ -131,24 +119,22 @@ def sync( Returns: HTTPValidationError | NotePublic - """ - + """ return sync_detailed( note_id=note_id, -client=client, -body=body, - + client=client, + body=body, ).parsed + async def asyncio_detailed( note_id: UUID, *, client: AuthenticatedClient, body: NoteUpdate, - ) -> Response[HTTPValidationError | NotePublic]: - """ Update Note Route + """Update Note Route Update a note. @@ -162,29 +148,25 @@ async def asyncio_detailed( Returns: Response[HTTPValidationError | NotePublic] - """ - + """ kwargs = _get_kwargs( note_id=note_id, -body=body, - + body=body, ) - response = await client.get_async_httpx_client().request( - **kwargs - ) + response = await client.get_async_httpx_client().request(**kwargs) return _build_response(client=client, response=response) + async def asyncio( note_id: UUID, *, client: AuthenticatedClient, body: NoteUpdate, - ) -> HTTPValidationError | NotePublic | None: - """ Update Note Route + """Update Note Route Update a note. @@ -198,12 +180,12 @@ async def asyncio( Returns: HTTPValidationError | NotePublic - """ - - - return (await asyncio_detailed( - note_id=note_id, -client=client, -body=body, - - )).parsed + """ + + return ( + await asyncio_detailed( + note_id=note_id, + client=client, + body=body, + ) + ).parsed diff --git a/kindred-sdk/personal_crm_client/api/pets/__init__.py b/kindred-sdk/personal_crm_client/api/pets/__init__.py index c9921b5f..2d7c0b23 100644 --- a/kindred-sdk/personal_crm_client/api/pets/__init__.py +++ b/kindred-sdk/personal_crm_client/api/pets/__init__.py @@ -1 +1 @@ -""" Contains endpoint functions for accessing the API """ +"""Contains endpoint functions for accessing the API""" diff --git a/kindred-sdk/personal_crm_client/api/pets/pets_create_pet_route.py b/kindred-sdk/personal_crm_client/api/pets/pets_create_pet_route.py index 311d88eb..d3e3da3e 100644 --- a/kindred-sdk/personal_crm_client/api/pets/pets_create_pet_route.py +++ b/kindred-sdk/personal_crm_client/api/pets/pets_create_pet_route.py @@ -1,32 +1,22 @@ from http import HTTPStatus -from typing import Any, cast -from urllib.parse import quote +from typing import Any import httpx -from ...client import AuthenticatedClient, Client -from ...types import Response, UNSET from ... import errors - +from ...client import AuthenticatedClient, Client from ...models.http_validation_error import HTTPValidationError from ...models.pet_create import PetCreate from ...models.pet_public import PetPublic -from typing import cast - +from ...types import Response def _get_kwargs( *, body: PetCreate, - ) -> dict[str, Any]: headers: dict[str, Any] = {} - - - - - _kwargs: dict[str, Any] = { "method": "post", "url": "/api/v1/pets/", @@ -34,27 +24,23 @@ def _get_kwargs( _kwargs["json"] = body.to_dict() - headers["Content-Type"] = "application/json" _kwargs["headers"] = headers return _kwargs - -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> HTTPValidationError | PetPublic | None: +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> HTTPValidationError | PetPublic | None: if response.status_code == 200: response_200 = PetPublic.from_dict(response.json()) - - return response_200 if response.status_code == 422: response_422 = HTTPValidationError.from_dict(response.json()) - - return response_422 if client.raise_on_unexpected_status: @@ -63,7 +49,9 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[HTTPValidationError | PetPublic]: +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[HTTPValidationError | PetPublic]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -76,9 +64,8 @@ def sync_detailed( *, client: AuthenticatedClient, body: PetCreate, - ) -> Response[HTTPValidationError | PetPublic]: - """ Create Pet Route + """Create Pet Route Create a new pet. @@ -91,12 +78,10 @@ def sync_detailed( Returns: Response[HTTPValidationError | PetPublic] - """ - + """ kwargs = _get_kwargs( body=body, - ) response = client.get_httpx_client().request( @@ -105,13 +90,13 @@ def sync_detailed( return _build_response(client=client, response=response) + def sync( *, client: AuthenticatedClient, body: PetCreate, - ) -> HTTPValidationError | PetPublic | None: - """ Create Pet Route + """Create Pet Route Create a new pet. @@ -124,22 +109,20 @@ def sync( Returns: HTTPValidationError | PetPublic - """ - + """ return sync_detailed( client=client, -body=body, - + body=body, ).parsed + async def asyncio_detailed( *, client: AuthenticatedClient, body: PetCreate, - ) -> Response[HTTPValidationError | PetPublic]: - """ Create Pet Route + """Create Pet Route Create a new pet. @@ -152,27 +135,23 @@ async def asyncio_detailed( Returns: Response[HTTPValidationError | PetPublic] - """ - + """ kwargs = _get_kwargs( body=body, - ) - response = await client.get_async_httpx_client().request( - **kwargs - ) + response = await client.get_async_httpx_client().request(**kwargs) return _build_response(client=client, response=response) + async def asyncio( *, client: AuthenticatedClient, body: PetCreate, - ) -> HTTPValidationError | PetPublic | None: - """ Create Pet Route + """Create Pet Route Create a new pet. @@ -185,11 +164,11 @@ async def asyncio( Returns: HTTPValidationError | PetPublic - """ + """ - - return (await asyncio_detailed( - client=client, -body=body, - - )).parsed + return ( + await asyncio_detailed( + client=client, + body=body, + ) + ).parsed diff --git a/kindred-sdk/personal_crm_client/api/pets/pets_delete_pet.py b/kindred-sdk/personal_crm_client/api/pets/pets_delete_pet.py index f011f672..c33ae264 100644 --- a/kindred-sdk/personal_crm_client/api/pets/pets_delete_pet.py +++ b/kindred-sdk/personal_crm_client/api/pets/pets_delete_pet.py @@ -1,40 +1,32 @@ from http import HTTPStatus -from typing import Any, cast +from typing import Any from urllib.parse import quote +from uuid import UUID import httpx -from ...client import AuthenticatedClient, Client -from ...types import Response, UNSET from ... import errors - +from ...client import AuthenticatedClient, Client from ...models.http_validation_error import HTTPValidationError -from typing import cast -from uuid import UUID - +from ...types import Response def _get_kwargs( pet_id: UUID, - ) -> dict[str, Any]: - - - - - - _kwargs: dict[str, Any] = { "method": "delete", - "url": "/api/v1/pets/{pet_id}".format(pet_id=quote(str(pet_id), safe=""),), + "url": "/api/v1/pets/{pet_id}".format( + pet_id=quote(str(pet_id), safe=""), + ), } - return _kwargs - -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Any | HTTPValidationError | None: +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Any | HTTPValidationError | None: if response.status_code == 200: response_200 = response.json() return response_200 @@ -42,8 +34,6 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res if response.status_code == 422: response_422 = HTTPValidationError.from_dict(response.json()) - - return response_422 if client.raise_on_unexpected_status: @@ -52,7 +42,9 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[Any | HTTPValidationError]: +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[Any | HTTPValidationError]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -65,9 +57,8 @@ def sync_detailed( pet_id: UUID, *, client: AuthenticatedClient, - ) -> Response[Any | HTTPValidationError]: - """ Delete Pet + """Delete Pet Delete a pet. @@ -80,12 +71,10 @@ def sync_detailed( Returns: Response[Any | HTTPValidationError] - """ - + """ kwargs = _get_kwargs( pet_id=pet_id, - ) response = client.get_httpx_client().request( @@ -94,13 +83,13 @@ def sync_detailed( return _build_response(client=client, response=response) + def sync( pet_id: UUID, *, client: AuthenticatedClient, - ) -> Any | HTTPValidationError | None: - """ Delete Pet + """Delete Pet Delete a pet. @@ -113,22 +102,20 @@ def sync( Returns: Any | HTTPValidationError - """ - + """ return sync_detailed( pet_id=pet_id, -client=client, - + client=client, ).parsed + async def asyncio_detailed( pet_id: UUID, *, client: AuthenticatedClient, - ) -> Response[Any | HTTPValidationError]: - """ Delete Pet + """Delete Pet Delete a pet. @@ -141,27 +128,23 @@ async def asyncio_detailed( Returns: Response[Any | HTTPValidationError] - """ - + """ kwargs = _get_kwargs( pet_id=pet_id, - ) - response = await client.get_async_httpx_client().request( - **kwargs - ) + response = await client.get_async_httpx_client().request(**kwargs) return _build_response(client=client, response=response) + async def asyncio( pet_id: UUID, *, client: AuthenticatedClient, - ) -> Any | HTTPValidationError | None: - """ Delete Pet + """Delete Pet Delete a pet. @@ -174,11 +157,11 @@ async def asyncio( Returns: Any | HTTPValidationError - """ + """ - - return (await asyncio_detailed( - pet_id=pet_id, -client=client, - - )).parsed + return ( + await asyncio_detailed( + pet_id=pet_id, + client=client, + ) + ).parsed diff --git a/kindred-sdk/personal_crm_client/api/pets/pets_list_pets.py b/kindred-sdk/personal_crm_client/api/pets/pets_list_pets.py index d1350305..fc17b4a0 100644 --- a/kindred-sdk/personal_crm_client/api/pets/pets_list_pets.py +++ b/kindred-sdk/personal_crm_client/api/pets/pets_list_pets.py @@ -1,40 +1,32 @@ from http import HTTPStatus -from typing import Any, cast +from typing import Any from urllib.parse import quote +from uuid import UUID import httpx -from ...client import AuthenticatedClient, Client -from ...types import Response, UNSET from ... import errors - +from ...client import AuthenticatedClient, Client from ...models.http_validation_error import HTTPValidationError -from typing import cast -from uuid import UUID - +from ...types import Response def _get_kwargs( contact_id: UUID, - ) -> dict[str, Any]: - - - - - - _kwargs: dict[str, Any] = { "method": "get", - "url": "/api/v1/pets/contact/{contact_id}".format(contact_id=quote(str(contact_id), safe=""),), + "url": "/api/v1/pets/contact/{contact_id}".format( + contact_id=quote(str(contact_id), safe=""), + ), } - return _kwargs - -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Any | HTTPValidationError | None: +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Any | HTTPValidationError | None: if response.status_code == 200: response_200 = response.json() return response_200 @@ -42,8 +34,6 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res if response.status_code == 422: response_422 = HTTPValidationError.from_dict(response.json()) - - return response_422 if client.raise_on_unexpected_status: @@ -52,7 +42,9 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[Any | HTTPValidationError]: +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[Any | HTTPValidationError]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -65,9 +57,8 @@ def sync_detailed( contact_id: UUID, *, client: AuthenticatedClient, - ) -> Response[Any | HTTPValidationError]: - """ List Pets + """List Pets List pets for a contact. @@ -80,12 +71,10 @@ def sync_detailed( Returns: Response[Any | HTTPValidationError] - """ - + """ kwargs = _get_kwargs( contact_id=contact_id, - ) response = client.get_httpx_client().request( @@ -94,13 +83,13 @@ def sync_detailed( return _build_response(client=client, response=response) + def sync( contact_id: UUID, *, client: AuthenticatedClient, - ) -> Any | HTTPValidationError | None: - """ List Pets + """List Pets List pets for a contact. @@ -113,22 +102,20 @@ def sync( Returns: Any | HTTPValidationError - """ - + """ return sync_detailed( contact_id=contact_id, -client=client, - + client=client, ).parsed + async def asyncio_detailed( contact_id: UUID, *, client: AuthenticatedClient, - ) -> Response[Any | HTTPValidationError]: - """ List Pets + """List Pets List pets for a contact. @@ -141,27 +128,23 @@ async def asyncio_detailed( Returns: Response[Any | HTTPValidationError] - """ - + """ kwargs = _get_kwargs( contact_id=contact_id, - ) - response = await client.get_async_httpx_client().request( - **kwargs - ) + response = await client.get_async_httpx_client().request(**kwargs) return _build_response(client=client, response=response) + async def asyncio( contact_id: UUID, *, client: AuthenticatedClient, - ) -> Any | HTTPValidationError | None: - """ List Pets + """List Pets List pets for a contact. @@ -174,11 +157,11 @@ async def asyncio( Returns: Any | HTTPValidationError - """ + """ - - return (await asyncio_detailed( - contact_id=contact_id, -client=client, - - )).parsed + return ( + await asyncio_detailed( + contact_id=contact_id, + client=client, + ) + ).parsed diff --git a/kindred-sdk/personal_crm_client/api/pets/pets_update_pet.py b/kindred-sdk/personal_crm_client/api/pets/pets_update_pet.py index 9095c2db..69c081b2 100644 --- a/kindred-sdk/personal_crm_client/api/pets/pets_update_pet.py +++ b/kindred-sdk/personal_crm_client/api/pets/pets_update_pet.py @@ -1,62 +1,51 @@ from http import HTTPStatus -from typing import Any, cast +from typing import Any from urllib.parse import quote +from uuid import UUID import httpx -from ...client import AuthenticatedClient, Client -from ...types import Response, UNSET from ... import errors - +from ...client import AuthenticatedClient, Client from ...models.http_validation_error import HTTPValidationError from ...models.pet_public import PetPublic from ...models.pet_update import PetUpdate -from typing import cast -from uuid import UUID - +from ...types import Response def _get_kwargs( pet_id: UUID, *, body: PetUpdate, - ) -> dict[str, Any]: headers: dict[str, Any] = {} - - - - - _kwargs: dict[str, Any] = { "method": "patch", - "url": "/api/v1/pets/{pet_id}".format(pet_id=quote(str(pet_id), safe=""),), + "url": "/api/v1/pets/{pet_id}".format( + pet_id=quote(str(pet_id), safe=""), + ), } _kwargs["json"] = body.to_dict() - headers["Content-Type"] = "application/json" _kwargs["headers"] = headers return _kwargs - -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> HTTPValidationError | PetPublic | None: +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> HTTPValidationError | PetPublic | None: if response.status_code == 200: response_200 = PetPublic.from_dict(response.json()) - - return response_200 if response.status_code == 422: response_422 = HTTPValidationError.from_dict(response.json()) - - return response_422 if client.raise_on_unexpected_status: @@ -65,7 +54,9 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[HTTPValidationError | PetPublic]: +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[HTTPValidationError | PetPublic]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -79,9 +70,8 @@ def sync_detailed( *, client: AuthenticatedClient, body: PetUpdate, - ) -> Response[HTTPValidationError | PetPublic]: - """ Update Pet + """Update Pet Update a pet. @@ -95,13 +85,11 @@ def sync_detailed( Returns: Response[HTTPValidationError | PetPublic] - """ - + """ kwargs = _get_kwargs( pet_id=pet_id, -body=body, - + body=body, ) response = client.get_httpx_client().request( @@ -110,14 +98,14 @@ def sync_detailed( return _build_response(client=client, response=response) + def sync( pet_id: UUID, *, client: AuthenticatedClient, body: PetUpdate, - ) -> HTTPValidationError | PetPublic | None: - """ Update Pet + """Update Pet Update a pet. @@ -131,24 +119,22 @@ def sync( Returns: HTTPValidationError | PetPublic - """ - + """ return sync_detailed( pet_id=pet_id, -client=client, -body=body, - + client=client, + body=body, ).parsed + async def asyncio_detailed( pet_id: UUID, *, client: AuthenticatedClient, body: PetUpdate, - ) -> Response[HTTPValidationError | PetPublic]: - """ Update Pet + """Update Pet Update a pet. @@ -162,29 +148,25 @@ async def asyncio_detailed( Returns: Response[HTTPValidationError | PetPublic] - """ - + """ kwargs = _get_kwargs( pet_id=pet_id, -body=body, - + body=body, ) - response = await client.get_async_httpx_client().request( - **kwargs - ) + response = await client.get_async_httpx_client().request(**kwargs) return _build_response(client=client, response=response) + async def asyncio( pet_id: UUID, *, client: AuthenticatedClient, body: PetUpdate, - ) -> HTTPValidationError | PetPublic | None: - """ Update Pet + """Update Pet Update a pet. @@ -198,12 +180,12 @@ async def asyncio( Returns: HTTPValidationError | PetPublic - """ - - - return (await asyncio_detailed( - pet_id=pet_id, -client=client, -body=body, - - )).parsed + """ + + return ( + await asyncio_detailed( + pet_id=pet_id, + client=client, + body=body, + ) + ).parsed diff --git a/kindred-sdk/personal_crm_client/api/private/__init__.py b/kindred-sdk/personal_crm_client/api/private/__init__.py index c9921b5f..2d7c0b23 100644 --- a/kindred-sdk/personal_crm_client/api/private/__init__.py +++ b/kindred-sdk/personal_crm_client/api/private/__init__.py @@ -1 +1 @@ -""" Contains endpoint functions for accessing the API """ +"""Contains endpoint functions for accessing the API""" diff --git a/kindred-sdk/personal_crm_client/api/private/private_create_user.py b/kindred-sdk/personal_crm_client/api/private/private_create_user.py index d7fc013a..ad247059 100644 --- a/kindred-sdk/personal_crm_client/api/private/private_create_user.py +++ b/kindred-sdk/personal_crm_client/api/private/private_create_user.py @@ -1,32 +1,22 @@ from http import HTTPStatus -from typing import Any, cast -from urllib.parse import quote +from typing import Any import httpx -from ...client import AuthenticatedClient, Client -from ...types import Response, UNSET from ... import errors - +from ...client import AuthenticatedClient, Client from ...models.http_validation_error import HTTPValidationError from ...models.private_user_create import PrivateUserCreate from ...models.user_public import UserPublic -from typing import cast - +from ...types import Response def _get_kwargs( *, body: PrivateUserCreate, - ) -> dict[str, Any]: headers: dict[str, Any] = {} - - - - - _kwargs: dict[str, Any] = { "method": "post", "url": "/api/v1/private/users/", @@ -34,27 +24,23 @@ def _get_kwargs( _kwargs["json"] = body.to_dict() - headers["Content-Type"] = "application/json" _kwargs["headers"] = headers return _kwargs - -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> HTTPValidationError | UserPublic | None: +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> HTTPValidationError | UserPublic | None: if response.status_code == 200: response_200 = UserPublic.from_dict(response.json()) - - return response_200 if response.status_code == 422: response_422 = HTTPValidationError.from_dict(response.json()) - - return response_422 if client.raise_on_unexpected_status: @@ -63,7 +49,9 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[HTTPValidationError | UserPublic]: +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[HTTPValidationError | UserPublic]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -76,9 +64,8 @@ def sync_detailed( *, client: AuthenticatedClient | Client, body: PrivateUserCreate, - ) -> Response[HTTPValidationError | UserPublic]: - """ Create User + """Create User Create a new user. @@ -91,12 +78,10 @@ def sync_detailed( Returns: Response[HTTPValidationError | UserPublic] - """ - + """ kwargs = _get_kwargs( body=body, - ) response = client.get_httpx_client().request( @@ -105,13 +90,13 @@ def sync_detailed( return _build_response(client=client, response=response) + def sync( *, client: AuthenticatedClient | Client, body: PrivateUserCreate, - ) -> HTTPValidationError | UserPublic | None: - """ Create User + """Create User Create a new user. @@ -124,22 +109,20 @@ def sync( Returns: HTTPValidationError | UserPublic - """ - + """ return sync_detailed( client=client, -body=body, - + body=body, ).parsed + async def asyncio_detailed( *, client: AuthenticatedClient | Client, body: PrivateUserCreate, - ) -> Response[HTTPValidationError | UserPublic]: - """ Create User + """Create User Create a new user. @@ -152,27 +135,23 @@ async def asyncio_detailed( Returns: Response[HTTPValidationError | UserPublic] - """ - + """ kwargs = _get_kwargs( body=body, - ) - response = await client.get_async_httpx_client().request( - **kwargs - ) + response = await client.get_async_httpx_client().request(**kwargs) return _build_response(client=client, response=response) + async def asyncio( *, client: AuthenticatedClient | Client, body: PrivateUserCreate, - ) -> HTTPValidationError | UserPublic | None: - """ Create User + """Create User Create a new user. @@ -185,11 +164,11 @@ async def asyncio( Returns: HTTPValidationError | UserPublic - """ + """ - - return (await asyncio_detailed( - client=client, -body=body, - - )).parsed + return ( + await asyncio_detailed( + client=client, + body=body, + ) + ).parsed diff --git a/kindred-sdk/personal_crm_client/api/relationships/__init__.py b/kindred-sdk/personal_crm_client/api/relationships/__init__.py index c9921b5f..2d7c0b23 100644 --- a/kindred-sdk/personal_crm_client/api/relationships/__init__.py +++ b/kindred-sdk/personal_crm_client/api/relationships/__init__.py @@ -1 +1 @@ -""" Contains endpoint functions for accessing the API """ +"""Contains endpoint functions for accessing the API""" diff --git a/kindred-sdk/personal_crm_client/api/relationships/relationships_create_relationship_route.py b/kindred-sdk/personal_crm_client/api/relationships/relationships_create_relationship_route.py index 2a267c5d..779b3769 100644 --- a/kindred-sdk/personal_crm_client/api/relationships/relationships_create_relationship_route.py +++ b/kindred-sdk/personal_crm_client/api/relationships/relationships_create_relationship_route.py @@ -1,32 +1,22 @@ from http import HTTPStatus -from typing import Any, cast -from urllib.parse import quote +from typing import Any import httpx -from ...client import AuthenticatedClient, Client -from ...types import Response, UNSET from ... import errors - +from ...client import AuthenticatedClient, Client from ...models.http_validation_error import HTTPValidationError from ...models.relationship_create import RelationshipCreate from ...models.relationship_public import RelationshipPublic -from typing import cast - +from ...types import Response def _get_kwargs( *, body: RelationshipCreate, - ) -> dict[str, Any]: headers: dict[str, Any] = {} - - - - - _kwargs: dict[str, Any] = { "method": "post", "url": "/api/v1/relationships/", @@ -34,27 +24,23 @@ def _get_kwargs( _kwargs["json"] = body.to_dict() - headers["Content-Type"] = "application/json" _kwargs["headers"] = headers return _kwargs - -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> HTTPValidationError | RelationshipPublic | None: +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> HTTPValidationError | RelationshipPublic | None: if response.status_code == 200: response_200 = RelationshipPublic.from_dict(response.json()) - - return response_200 if response.status_code == 422: response_422 = HTTPValidationError.from_dict(response.json()) - - return response_422 if client.raise_on_unexpected_status: @@ -63,7 +49,9 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[HTTPValidationError | RelationshipPublic]: +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[HTTPValidationError | RelationshipPublic]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -76,9 +64,8 @@ def sync_detailed( *, client: AuthenticatedClient, body: RelationshipCreate, - ) -> Response[HTTPValidationError | RelationshipPublic]: - """ Create Relationship Route + """Create Relationship Route Create a relationship plus its inverse so both contacts stay symmetric. @@ -91,12 +78,10 @@ def sync_detailed( Returns: Response[HTTPValidationError | RelationshipPublic] - """ - + """ kwargs = _get_kwargs( body=body, - ) response = client.get_httpx_client().request( @@ -105,13 +90,13 @@ def sync_detailed( return _build_response(client=client, response=response) + def sync( *, client: AuthenticatedClient, body: RelationshipCreate, - ) -> HTTPValidationError | RelationshipPublic | None: - """ Create Relationship Route + """Create Relationship Route Create a relationship plus its inverse so both contacts stay symmetric. @@ -124,22 +109,20 @@ def sync( Returns: HTTPValidationError | RelationshipPublic - """ - + """ return sync_detailed( client=client, -body=body, - + body=body, ).parsed + async def asyncio_detailed( *, client: AuthenticatedClient, body: RelationshipCreate, - ) -> Response[HTTPValidationError | RelationshipPublic]: - """ Create Relationship Route + """Create Relationship Route Create a relationship plus its inverse so both contacts stay symmetric. @@ -152,27 +135,23 @@ async def asyncio_detailed( Returns: Response[HTTPValidationError | RelationshipPublic] - """ - + """ kwargs = _get_kwargs( body=body, - ) - response = await client.get_async_httpx_client().request( - **kwargs - ) + response = await client.get_async_httpx_client().request(**kwargs) return _build_response(client=client, response=response) + async def asyncio( *, client: AuthenticatedClient, body: RelationshipCreate, - ) -> HTTPValidationError | RelationshipPublic | None: - """ Create Relationship Route + """Create Relationship Route Create a relationship plus its inverse so both contacts stay symmetric. @@ -185,11 +164,11 @@ async def asyncio( Returns: HTTPValidationError | RelationshipPublic - """ + """ - - return (await asyncio_detailed( - client=client, -body=body, - - )).parsed + return ( + await asyncio_detailed( + client=client, + body=body, + ) + ).parsed diff --git a/kindred-sdk/personal_crm_client/api/relationships/relationships_delete_relationship.py b/kindred-sdk/personal_crm_client/api/relationships/relationships_delete_relationship.py index 9bbf89c2..c8d88a63 100644 --- a/kindred-sdk/personal_crm_client/api/relationships/relationships_delete_relationship.py +++ b/kindred-sdk/personal_crm_client/api/relationships/relationships_delete_relationship.py @@ -1,40 +1,32 @@ from http import HTTPStatus -from typing import Any, cast +from typing import Any from urllib.parse import quote +from uuid import UUID import httpx -from ...client import AuthenticatedClient, Client -from ...types import Response, UNSET from ... import errors - +from ...client import AuthenticatedClient, Client from ...models.http_validation_error import HTTPValidationError -from typing import cast -from uuid import UUID - +from ...types import Response def _get_kwargs( rel_id: UUID, - ) -> dict[str, Any]: - - - - - - _kwargs: dict[str, Any] = { "method": "delete", - "url": "/api/v1/relationships/{rel_id}".format(rel_id=quote(str(rel_id), safe=""),), + "url": "/api/v1/relationships/{rel_id}".format( + rel_id=quote(str(rel_id), safe=""), + ), } - return _kwargs - -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Any | HTTPValidationError | None: +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Any | HTTPValidationError | None: if response.status_code == 200: response_200 = response.json() return response_200 @@ -42,8 +34,6 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res if response.status_code == 422: response_422 = HTTPValidationError.from_dict(response.json()) - - return response_422 if client.raise_on_unexpected_status: @@ -52,7 +42,9 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[Any | HTTPValidationError]: +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[Any | HTTPValidationError]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -65,9 +57,8 @@ def sync_detailed( rel_id: UUID, *, client: AuthenticatedClient, - ) -> Response[Any | HTTPValidationError]: - """ Delete Relationship + """Delete Relationship Delete a relationship and its paired inverse row. @@ -80,12 +71,10 @@ def sync_detailed( Returns: Response[Any | HTTPValidationError] - """ - + """ kwargs = _get_kwargs( rel_id=rel_id, - ) response = client.get_httpx_client().request( @@ -94,13 +83,13 @@ def sync_detailed( return _build_response(client=client, response=response) + def sync( rel_id: UUID, *, client: AuthenticatedClient, - ) -> Any | HTTPValidationError | None: - """ Delete Relationship + """Delete Relationship Delete a relationship and its paired inverse row. @@ -113,22 +102,20 @@ def sync( Returns: Any | HTTPValidationError - """ - + """ return sync_detailed( rel_id=rel_id, -client=client, - + client=client, ).parsed + async def asyncio_detailed( rel_id: UUID, *, client: AuthenticatedClient, - ) -> Response[Any | HTTPValidationError]: - """ Delete Relationship + """Delete Relationship Delete a relationship and its paired inverse row. @@ -141,27 +128,23 @@ async def asyncio_detailed( Returns: Response[Any | HTTPValidationError] - """ - + """ kwargs = _get_kwargs( rel_id=rel_id, - ) - response = await client.get_async_httpx_client().request( - **kwargs - ) + response = await client.get_async_httpx_client().request(**kwargs) return _build_response(client=client, response=response) + async def asyncio( rel_id: UUID, *, client: AuthenticatedClient, - ) -> Any | HTTPValidationError | None: - """ Delete Relationship + """Delete Relationship Delete a relationship and its paired inverse row. @@ -174,11 +157,11 @@ async def asyncio( Returns: Any | HTTPValidationError - """ + """ - - return (await asyncio_detailed( - rel_id=rel_id, -client=client, - - )).parsed + return ( + await asyncio_detailed( + rel_id=rel_id, + client=client, + ) + ).parsed diff --git a/kindred-sdk/personal_crm_client/api/relationships/relationships_list_relationships.py b/kindred-sdk/personal_crm_client/api/relationships/relationships_list_relationships.py index a07478d5..833fde15 100644 --- a/kindred-sdk/personal_crm_client/api/relationships/relationships_list_relationships.py +++ b/kindred-sdk/personal_crm_client/api/relationships/relationships_list_relationships.py @@ -1,40 +1,32 @@ from http import HTTPStatus -from typing import Any, cast +from typing import Any from urllib.parse import quote +from uuid import UUID import httpx -from ...client import AuthenticatedClient, Client -from ...types import Response, UNSET from ... import errors - +from ...client import AuthenticatedClient, Client from ...models.http_validation_error import HTTPValidationError -from typing import cast -from uuid import UUID - +from ...types import Response def _get_kwargs( contact_id: UUID, - ) -> dict[str, Any]: - - - - - - _kwargs: dict[str, Any] = { "method": "get", - "url": "/api/v1/relationships/contact/{contact_id}".format(contact_id=quote(str(contact_id), safe=""),), + "url": "/api/v1/relationships/contact/{contact_id}".format( + contact_id=quote(str(contact_id), safe=""), + ), } - return _kwargs - -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Any | HTTPValidationError | None: +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Any | HTTPValidationError | None: if response.status_code == 200: response_200 = response.json() return response_200 @@ -42,8 +34,6 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res if response.status_code == 422: response_422 = HTTPValidationError.from_dict(response.json()) - - return response_422 if client.raise_on_unexpected_status: @@ -52,7 +42,9 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[Any | HTTPValidationError]: +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[Any | HTTPValidationError]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -65,9 +57,8 @@ def sync_detailed( contact_id: UUID, *, client: AuthenticatedClient, - ) -> Response[Any | HTTPValidationError]: - """ List Relationships + """List Relationships List relationships for a contact. @@ -80,12 +71,10 @@ def sync_detailed( Returns: Response[Any | HTTPValidationError] - """ - + """ kwargs = _get_kwargs( contact_id=contact_id, - ) response = client.get_httpx_client().request( @@ -94,13 +83,13 @@ def sync_detailed( return _build_response(client=client, response=response) + def sync( contact_id: UUID, *, client: AuthenticatedClient, - ) -> Any | HTTPValidationError | None: - """ List Relationships + """List Relationships List relationships for a contact. @@ -113,22 +102,20 @@ def sync( Returns: Any | HTTPValidationError - """ - + """ return sync_detailed( contact_id=contact_id, -client=client, - + client=client, ).parsed + async def asyncio_detailed( contact_id: UUID, *, client: AuthenticatedClient, - ) -> Response[Any | HTTPValidationError]: - """ List Relationships + """List Relationships List relationships for a contact. @@ -141,27 +128,23 @@ async def asyncio_detailed( Returns: Response[Any | HTTPValidationError] - """ - + """ kwargs = _get_kwargs( contact_id=contact_id, - ) - response = await client.get_async_httpx_client().request( - **kwargs - ) + response = await client.get_async_httpx_client().request(**kwargs) return _build_response(client=client, response=response) + async def asyncio( contact_id: UUID, *, client: AuthenticatedClient, - ) -> Any | HTTPValidationError | None: - """ List Relationships + """List Relationships List relationships for a contact. @@ -174,11 +157,11 @@ async def asyncio( Returns: Any | HTTPValidationError - """ + """ - - return (await asyncio_detailed( - contact_id=contact_id, -client=client, - - )).parsed + return ( + await asyncio_detailed( + contact_id=contact_id, + client=client, + ) + ).parsed diff --git a/kindred-sdk/personal_crm_client/api/relationships/relationships_lookup_inverse.py b/kindred-sdk/personal_crm_client/api/relationships/relationships_lookup_inverse.py index 709d75a8..bdb2d3f5 100644 --- a/kindred-sdk/personal_crm_client/api/relationships/relationships_lookup_inverse.py +++ b/kindred-sdk/personal_crm_client/api/relationships/relationships_lookup_inverse.py @@ -1,60 +1,47 @@ from http import HTTPStatus -from typing import Any, cast -from urllib.parse import quote +from typing import Any import httpx -from ...client import AuthenticatedClient, Client -from ...types import Response, UNSET from ... import errors - +from ...client import AuthenticatedClient, Client from ...models.http_validation_error import HTTPValidationError -from ...models.relationships_lookup_inverse_response_relationships_lookup_inverse import RelationshipsLookupInverseResponseRelationshipsLookupInverse -from typing import cast - +from ...models.relationships_lookup_inverse_response_relationships_lookup_inverse import ( + RelationshipsLookupInverseResponseRelationshipsLookupInverse, +) +from ...types import UNSET, Response def _get_kwargs( *, type_: str, - ) -> dict[str, Any]: - - - - params: dict[str, Any] = {} params["type"] = type_ - params = {k: v for k, v in params.items() if v is not UNSET and v is not None} - _kwargs: dict[str, Any] = { "method": "get", "url": "/api/v1/relationships/inverse", "params": params, } - return _kwargs - -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> HTTPValidationError | RelationshipsLookupInverseResponseRelationshipsLookupInverse | None: +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> HTTPValidationError | RelationshipsLookupInverseResponseRelationshipsLookupInverse | None: if response.status_code == 200: response_200 = RelationshipsLookupInverseResponseRelationshipsLookupInverse.from_dict(response.json()) - - return response_200 if response.status_code == 422: response_422 = HTTPValidationError.from_dict(response.json()) - - return response_422 if client.raise_on_unexpected_status: @@ -63,7 +50,9 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[HTTPValidationError | RelationshipsLookupInverseResponseRelationshipsLookupInverse]: +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[HTTPValidationError | RelationshipsLookupInverseResponseRelationshipsLookupInverse]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -76,9 +65,8 @@ def sync_detailed( *, client: AuthenticatedClient, type_: str, - ) -> Response[HTTPValidationError | RelationshipsLookupInverseResponseRelationshipsLookupInverse]: - r""" Lookup Inverse + r"""Lookup Inverse Return the inferred inverse for a relationship type, or null. @@ -96,12 +84,10 @@ def sync_detailed( Returns: Response[HTTPValidationError | RelationshipsLookupInverseResponseRelationshipsLookupInverse] - """ - + """ kwargs = _get_kwargs( type_=type_, - ) response = client.get_httpx_client().request( @@ -110,13 +96,13 @@ def sync_detailed( return _build_response(client=client, response=response) + def sync( *, client: AuthenticatedClient, type_: str, - ) -> HTTPValidationError | RelationshipsLookupInverseResponseRelationshipsLookupInverse | None: - r""" Lookup Inverse + r"""Lookup Inverse Return the inferred inverse for a relationship type, or null. @@ -134,22 +120,20 @@ def sync( Returns: HTTPValidationError | RelationshipsLookupInverseResponseRelationshipsLookupInverse - """ - + """ return sync_detailed( client=client, -type_=type_, - + type_=type_, ).parsed + async def asyncio_detailed( *, client: AuthenticatedClient, type_: str, - ) -> Response[HTTPValidationError | RelationshipsLookupInverseResponseRelationshipsLookupInverse]: - r""" Lookup Inverse + r"""Lookup Inverse Return the inferred inverse for a relationship type, or null. @@ -167,27 +151,23 @@ async def asyncio_detailed( Returns: Response[HTTPValidationError | RelationshipsLookupInverseResponseRelationshipsLookupInverse] - """ - + """ kwargs = _get_kwargs( type_=type_, - ) - response = await client.get_async_httpx_client().request( - **kwargs - ) + response = await client.get_async_httpx_client().request(**kwargs) return _build_response(client=client, response=response) + async def asyncio( *, client: AuthenticatedClient, type_: str, - ) -> HTTPValidationError | RelationshipsLookupInverseResponseRelationshipsLookupInverse | None: - r""" Lookup Inverse + r"""Lookup Inverse Return the inferred inverse for a relationship type, or null. @@ -205,11 +185,11 @@ async def asyncio( Returns: HTTPValidationError | RelationshipsLookupInverseResponseRelationshipsLookupInverse - """ + """ - - return (await asyncio_detailed( - client=client, -type_=type_, - - )).parsed + return ( + await asyncio_detailed( + client=client, + type_=type_, + ) + ).parsed diff --git a/kindred-sdk/personal_crm_client/api/relationships/relationships_update_relationship.py b/kindred-sdk/personal_crm_client/api/relationships/relationships_update_relationship.py index c22f6623..2102e698 100644 --- a/kindred-sdk/personal_crm_client/api/relationships/relationships_update_relationship.py +++ b/kindred-sdk/personal_crm_client/api/relationships/relationships_update_relationship.py @@ -1,62 +1,51 @@ from http import HTTPStatus -from typing import Any, cast +from typing import Any from urllib.parse import quote +from uuid import UUID import httpx -from ...client import AuthenticatedClient, Client -from ...types import Response, UNSET from ... import errors - +from ...client import AuthenticatedClient, Client from ...models.http_validation_error import HTTPValidationError from ...models.relationship_public import RelationshipPublic from ...models.relationship_update import RelationshipUpdate -from typing import cast -from uuid import UUID - +from ...types import Response def _get_kwargs( rel_id: UUID, *, body: RelationshipUpdate, - ) -> dict[str, Any]: headers: dict[str, Any] = {} - - - - - _kwargs: dict[str, Any] = { "method": "patch", - "url": "/api/v1/relationships/{rel_id}".format(rel_id=quote(str(rel_id), safe=""),), + "url": "/api/v1/relationships/{rel_id}".format( + rel_id=quote(str(rel_id), safe=""), + ), } _kwargs["json"] = body.to_dict() - headers["Content-Type"] = "application/json" _kwargs["headers"] = headers return _kwargs - -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> HTTPValidationError | RelationshipPublic | None: +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> HTTPValidationError | RelationshipPublic | None: if response.status_code == 200: response_200 = RelationshipPublic.from_dict(response.json()) - - return response_200 if response.status_code == 422: response_422 = HTTPValidationError.from_dict(response.json()) - - return response_422 if client.raise_on_unexpected_status: @@ -65,7 +54,9 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[HTTPValidationError | RelationshipPublic]: +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[HTTPValidationError | RelationshipPublic]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -79,9 +70,8 @@ def sync_detailed( *, client: AuthenticatedClient, body: RelationshipUpdate, - ) -> Response[HTTPValidationError | RelationshipPublic]: - """ Update Relationship + """Update Relationship Update a relationship. @@ -100,13 +90,11 @@ def sync_detailed( Returns: Response[HTTPValidationError | RelationshipPublic] - """ - + """ kwargs = _get_kwargs( rel_id=rel_id, -body=body, - + body=body, ) response = client.get_httpx_client().request( @@ -115,14 +103,14 @@ def sync_detailed( return _build_response(client=client, response=response) + def sync( rel_id: UUID, *, client: AuthenticatedClient, body: RelationshipUpdate, - ) -> HTTPValidationError | RelationshipPublic | None: - """ Update Relationship + """Update Relationship Update a relationship. @@ -141,24 +129,22 @@ def sync( Returns: HTTPValidationError | RelationshipPublic - """ - + """ return sync_detailed( rel_id=rel_id, -client=client, -body=body, - + client=client, + body=body, ).parsed + async def asyncio_detailed( rel_id: UUID, *, client: AuthenticatedClient, body: RelationshipUpdate, - ) -> Response[HTTPValidationError | RelationshipPublic]: - """ Update Relationship + """Update Relationship Update a relationship. @@ -177,29 +163,25 @@ async def asyncio_detailed( Returns: Response[HTTPValidationError | RelationshipPublic] - """ - + """ kwargs = _get_kwargs( rel_id=rel_id, -body=body, - + body=body, ) - response = await client.get_async_httpx_client().request( - **kwargs - ) + response = await client.get_async_httpx_client().request(**kwargs) return _build_response(client=client, response=response) + async def asyncio( rel_id: UUID, *, client: AuthenticatedClient, body: RelationshipUpdate, - ) -> HTTPValidationError | RelationshipPublic | None: - """ Update Relationship + """Update Relationship Update a relationship. @@ -218,12 +200,12 @@ async def asyncio( Returns: HTTPValidationError | RelationshipPublic - """ - - - return (await asyncio_detailed( - rel_id=rel_id, -client=client, -body=body, - - )).parsed + """ + + return ( + await asyncio_detailed( + rel_id=rel_id, + client=client, + body=body, + ) + ).parsed diff --git a/kindred-sdk/personal_crm_client/api/reminders/__init__.py b/kindred-sdk/personal_crm_client/api/reminders/__init__.py index c9921b5f..2d7c0b23 100644 --- a/kindred-sdk/personal_crm_client/api/reminders/__init__.py +++ b/kindred-sdk/personal_crm_client/api/reminders/__init__.py @@ -1 +1 @@ -""" Contains endpoint functions for accessing the API """ +"""Contains endpoint functions for accessing the API""" diff --git a/kindred-sdk/personal_crm_client/api/reminders/reminders_create_reminder_route.py b/kindred-sdk/personal_crm_client/api/reminders/reminders_create_reminder_route.py index 980adfbe..8a103bca 100644 --- a/kindred-sdk/personal_crm_client/api/reminders/reminders_create_reminder_route.py +++ b/kindred-sdk/personal_crm_client/api/reminders/reminders_create_reminder_route.py @@ -1,32 +1,22 @@ from http import HTTPStatus -from typing import Any, cast -from urllib.parse import quote +from typing import Any import httpx -from ...client import AuthenticatedClient, Client -from ...types import Response, UNSET from ... import errors - +from ...client import AuthenticatedClient, Client from ...models.http_validation_error import HTTPValidationError from ...models.reminder_create import ReminderCreate from ...models.reminder_public import ReminderPublic -from typing import cast - +from ...types import Response def _get_kwargs( *, body: ReminderCreate, - ) -> dict[str, Any]: headers: dict[str, Any] = {} - - - - - _kwargs: dict[str, Any] = { "method": "post", "url": "/api/v1/reminders/", @@ -34,27 +24,23 @@ def _get_kwargs( _kwargs["json"] = body.to_dict() - headers["Content-Type"] = "application/json" _kwargs["headers"] = headers return _kwargs - -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> HTTPValidationError | ReminderPublic | None: +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> HTTPValidationError | ReminderPublic | None: if response.status_code == 200: response_200 = ReminderPublic.from_dict(response.json()) - - return response_200 if response.status_code == 422: response_422 = HTTPValidationError.from_dict(response.json()) - - return response_422 if client.raise_on_unexpected_status: @@ -63,7 +49,9 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[HTTPValidationError | ReminderPublic]: +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[HTTPValidationError | ReminderPublic]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -76,9 +64,8 @@ def sync_detailed( *, client: AuthenticatedClient, body: ReminderCreate, - ) -> Response[HTTPValidationError | ReminderPublic]: - """ Create Reminder Route + """Create Reminder Route Create a new reminder. @@ -91,12 +78,10 @@ def sync_detailed( Returns: Response[HTTPValidationError | ReminderPublic] - """ - + """ kwargs = _get_kwargs( body=body, - ) response = client.get_httpx_client().request( @@ -105,13 +90,13 @@ def sync_detailed( return _build_response(client=client, response=response) + def sync( *, client: AuthenticatedClient, body: ReminderCreate, - ) -> HTTPValidationError | ReminderPublic | None: - """ Create Reminder Route + """Create Reminder Route Create a new reminder. @@ -124,22 +109,20 @@ def sync( Returns: HTTPValidationError | ReminderPublic - """ - + """ return sync_detailed( client=client, -body=body, - + body=body, ).parsed + async def asyncio_detailed( *, client: AuthenticatedClient, body: ReminderCreate, - ) -> Response[HTTPValidationError | ReminderPublic]: - """ Create Reminder Route + """Create Reminder Route Create a new reminder. @@ -152,27 +135,23 @@ async def asyncio_detailed( Returns: Response[HTTPValidationError | ReminderPublic] - """ - + """ kwargs = _get_kwargs( body=body, - ) - response = await client.get_async_httpx_client().request( - **kwargs - ) + response = await client.get_async_httpx_client().request(**kwargs) return _build_response(client=client, response=response) + async def asyncio( *, client: AuthenticatedClient, body: ReminderCreate, - ) -> HTTPValidationError | ReminderPublic | None: - """ Create Reminder Route + """Create Reminder Route Create a new reminder. @@ -185,11 +164,11 @@ async def asyncio( Returns: HTTPValidationError | ReminderPublic - """ + """ - - return (await asyncio_detailed( - client=client, -body=body, - - )).parsed + return ( + await asyncio_detailed( + client=client, + body=body, + ) + ).parsed diff --git a/kindred-sdk/personal_crm_client/api/reminders/reminders_delete_reminder.py b/kindred-sdk/personal_crm_client/api/reminders/reminders_delete_reminder.py index 789a31e9..9ef78851 100644 --- a/kindred-sdk/personal_crm_client/api/reminders/reminders_delete_reminder.py +++ b/kindred-sdk/personal_crm_client/api/reminders/reminders_delete_reminder.py @@ -1,40 +1,32 @@ from http import HTTPStatus -from typing import Any, cast +from typing import Any from urllib.parse import quote +from uuid import UUID import httpx -from ...client import AuthenticatedClient, Client -from ...types import Response, UNSET from ... import errors - +from ...client import AuthenticatedClient, Client from ...models.http_validation_error import HTTPValidationError -from typing import cast -from uuid import UUID - +from ...types import Response def _get_kwargs( reminder_id: UUID, - ) -> dict[str, Any]: - - - - - - _kwargs: dict[str, Any] = { "method": "delete", - "url": "/api/v1/reminders/{reminder_id}".format(reminder_id=quote(str(reminder_id), safe=""),), + "url": "/api/v1/reminders/{reminder_id}".format( + reminder_id=quote(str(reminder_id), safe=""), + ), } - return _kwargs - -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Any | HTTPValidationError | None: +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Any | HTTPValidationError | None: if response.status_code == 200: response_200 = response.json() return response_200 @@ -42,8 +34,6 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res if response.status_code == 422: response_422 = HTTPValidationError.from_dict(response.json()) - - return response_422 if client.raise_on_unexpected_status: @@ -52,7 +42,9 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[Any | HTTPValidationError]: +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[Any | HTTPValidationError]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -65,9 +57,8 @@ def sync_detailed( reminder_id: UUID, *, client: AuthenticatedClient, - ) -> Response[Any | HTTPValidationError]: - """ Delete Reminder + """Delete Reminder Delete a reminder. @@ -80,12 +71,10 @@ def sync_detailed( Returns: Response[Any | HTTPValidationError] - """ - + """ kwargs = _get_kwargs( reminder_id=reminder_id, - ) response = client.get_httpx_client().request( @@ -94,13 +83,13 @@ def sync_detailed( return _build_response(client=client, response=response) + def sync( reminder_id: UUID, *, client: AuthenticatedClient, - ) -> Any | HTTPValidationError | None: - """ Delete Reminder + """Delete Reminder Delete a reminder. @@ -113,22 +102,20 @@ def sync( Returns: Any | HTTPValidationError - """ - + """ return sync_detailed( reminder_id=reminder_id, -client=client, - + client=client, ).parsed + async def asyncio_detailed( reminder_id: UUID, *, client: AuthenticatedClient, - ) -> Response[Any | HTTPValidationError]: - """ Delete Reminder + """Delete Reminder Delete a reminder. @@ -141,27 +128,23 @@ async def asyncio_detailed( Returns: Response[Any | HTTPValidationError] - """ - + """ kwargs = _get_kwargs( reminder_id=reminder_id, - ) - response = await client.get_async_httpx_client().request( - **kwargs - ) + response = await client.get_async_httpx_client().request(**kwargs) return _build_response(client=client, response=response) + async def asyncio( reminder_id: UUID, *, client: AuthenticatedClient, - ) -> Any | HTTPValidationError | None: - """ Delete Reminder + """Delete Reminder Delete a reminder. @@ -174,11 +157,11 @@ async def asyncio( Returns: Any | HTTPValidationError - """ + """ - - return (await asyncio_detailed( - reminder_id=reminder_id, -client=client, - - )).parsed + return ( + await asyncio_detailed( + reminder_id=reminder_id, + client=client, + ) + ).parsed diff --git a/kindred-sdk/personal_crm_client/api/reminders/reminders_list_reminders.py b/kindred-sdk/personal_crm_client/api/reminders/reminders_list_reminders.py index 68025bd0..80a13cd4 100644 --- a/kindred-sdk/personal_crm_client/api/reminders/reminders_list_reminders.py +++ b/kindred-sdk/personal_crm_client/api/reminders/reminders_list_reminders.py @@ -1,18 +1,13 @@ from http import HTTPStatus -from typing import Any, cast -from urllib.parse import quote +from typing import Any import httpx -from ...client import AuthenticatedClient, Client -from ...types import Response, UNSET from ... import errors - +from ...client import AuthenticatedClient, Client from ...models.http_validation_error import HTTPValidationError from ...models.reminders_public import RemindersPublic -from ...types import UNSET, Unset -from typing import cast - +from ...types import UNSET, Response, Unset def _get_kwargs( @@ -20,12 +15,7 @@ def _get_kwargs( skip: int | Unset = 0, limit: int | Unset = 100, is_active: bool | None | Unset = UNSET, - ) -> dict[str, Any]: - - - - params: dict[str, Any] = {} params["skip"] = skip @@ -39,34 +29,28 @@ def _get_kwargs( json_is_active = is_active params["is_active"] = json_is_active - params = {k: v for k, v in params.items() if v is not UNSET and v is not None} - _kwargs: dict[str, Any] = { "method": "get", "url": "/api/v1/reminders/", "params": params, } - return _kwargs - -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> HTTPValidationError | RemindersPublic | None: +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> HTTPValidationError | RemindersPublic | None: if response.status_code == 200: response_200 = RemindersPublic.from_dict(response.json()) - - return response_200 if response.status_code == 422: response_422 = HTTPValidationError.from_dict(response.json()) - - return response_422 if client.raise_on_unexpected_status: @@ -75,7 +59,9 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[HTTPValidationError | RemindersPublic]: +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[HTTPValidationError | RemindersPublic]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -90,9 +76,8 @@ def sync_detailed( skip: int | Unset = 0, limit: int | Unset = 100, is_active: bool | None | Unset = UNSET, - ) -> Response[HTTPValidationError | RemindersPublic]: - """ List Reminders + """List Reminders List reminders for the current user (owned + tied to visible contacts). @@ -107,14 +92,12 @@ def sync_detailed( Returns: Response[HTTPValidationError | RemindersPublic] - """ - + """ kwargs = _get_kwargs( skip=skip, -limit=limit, -is_active=is_active, - + limit=limit, + is_active=is_active, ) response = client.get_httpx_client().request( @@ -123,15 +106,15 @@ def sync_detailed( return _build_response(client=client, response=response) + def sync( *, client: AuthenticatedClient, skip: int | Unset = 0, limit: int | Unset = 100, is_active: bool | None | Unset = UNSET, - ) -> HTTPValidationError | RemindersPublic | None: - """ List Reminders + """List Reminders List reminders for the current user (owned + tied to visible contacts). @@ -146,26 +129,24 @@ def sync( Returns: HTTPValidationError | RemindersPublic - """ - + """ return sync_detailed( client=client, -skip=skip, -limit=limit, -is_active=is_active, - + skip=skip, + limit=limit, + is_active=is_active, ).parsed + async def asyncio_detailed( *, client: AuthenticatedClient, skip: int | Unset = 0, limit: int | Unset = 100, is_active: bool | None | Unset = UNSET, - ) -> Response[HTTPValidationError | RemindersPublic]: - """ List Reminders + """List Reminders List reminders for the current user (owned + tied to visible contacts). @@ -180,31 +161,27 @@ async def asyncio_detailed( Returns: Response[HTTPValidationError | RemindersPublic] - """ - + """ kwargs = _get_kwargs( skip=skip, -limit=limit, -is_active=is_active, - + limit=limit, + is_active=is_active, ) - response = await client.get_async_httpx_client().request( - **kwargs - ) + response = await client.get_async_httpx_client().request(**kwargs) return _build_response(client=client, response=response) + async def asyncio( *, client: AuthenticatedClient, skip: int | Unset = 0, limit: int | Unset = 100, is_active: bool | None | Unset = UNSET, - ) -> HTTPValidationError | RemindersPublic | None: - """ List Reminders + """List Reminders List reminders for the current user (owned + tied to visible contacts). @@ -219,13 +196,13 @@ async def asyncio( Returns: HTTPValidationError | RemindersPublic - """ - - - return (await asyncio_detailed( - client=client, -skip=skip, -limit=limit, -is_active=is_active, - - )).parsed + """ + + return ( + await asyncio_detailed( + client=client, + skip=skip, + limit=limit, + is_active=is_active, + ) + ).parsed diff --git a/kindred-sdk/personal_crm_client/api/reminders/reminders_snooze_reminder.py b/kindred-sdk/personal_crm_client/api/reminders/reminders_snooze_reminder.py index 20fefab0..b12ab1ea 100644 --- a/kindred-sdk/personal_crm_client/api/reminders/reminders_snooze_reminder.py +++ b/kindred-sdk/personal_crm_client/api/reminders/reminders_snooze_reminder.py @@ -1,50 +1,41 @@ from http import HTTPStatus -from typing import Any, cast +from typing import Any from urllib.parse import quote +from uuid import UUID import httpx -from ...client import AuthenticatedClient, Client -from ...types import Response, UNSET from ... import errors - +from ...client import AuthenticatedClient, Client from ...models.http_validation_error import HTTPValidationError -from ...types import UNSET, Unset -from typing import cast -from uuid import UUID - +from ...types import UNSET, Response, Unset def _get_kwargs( reminder_id: UUID, *, minutes: int | Unset = 30, - ) -> dict[str, Any]: - - - - params: dict[str, Any] = {} params["minutes"] = minutes - params = {k: v for k, v in params.items() if v is not UNSET and v is not None} - _kwargs: dict[str, Any] = { "method": "post", - "url": "/api/v1/reminders/{reminder_id}/snooze".format(reminder_id=quote(str(reminder_id), safe=""),), + "url": "/api/v1/reminders/{reminder_id}/snooze".format( + reminder_id=quote(str(reminder_id), safe=""), + ), "params": params, } - return _kwargs - -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Any | HTTPValidationError | None: +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Any | HTTPValidationError | None: if response.status_code == 200: response_200 = response.json() return response_200 @@ -52,8 +43,6 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res if response.status_code == 422: response_422 = HTTPValidationError.from_dict(response.json()) - - return response_422 if client.raise_on_unexpected_status: @@ -62,7 +51,9 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[Any | HTTPValidationError]: +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[Any | HTTPValidationError]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -76,9 +67,8 @@ def sync_detailed( *, client: AuthenticatedClient, minutes: int | Unset = 30, - ) -> Response[Any | HTTPValidationError]: - """ Snooze Reminder + """Snooze Reminder Snooze a reminder. @@ -92,13 +82,11 @@ def sync_detailed( Returns: Response[Any | HTTPValidationError] - """ - + """ kwargs = _get_kwargs( reminder_id=reminder_id, -minutes=minutes, - + minutes=minutes, ) response = client.get_httpx_client().request( @@ -107,14 +95,14 @@ def sync_detailed( return _build_response(client=client, response=response) + def sync( reminder_id: UUID, *, client: AuthenticatedClient, minutes: int | Unset = 30, - ) -> Any | HTTPValidationError | None: - """ Snooze Reminder + """Snooze Reminder Snooze a reminder. @@ -128,24 +116,22 @@ def sync( Returns: Any | HTTPValidationError - """ - + """ return sync_detailed( reminder_id=reminder_id, -client=client, -minutes=minutes, - + client=client, + minutes=minutes, ).parsed + async def asyncio_detailed( reminder_id: UUID, *, client: AuthenticatedClient, minutes: int | Unset = 30, - ) -> Response[Any | HTTPValidationError]: - """ Snooze Reminder + """Snooze Reminder Snooze a reminder. @@ -159,29 +145,25 @@ async def asyncio_detailed( Returns: Response[Any | HTTPValidationError] - """ - + """ kwargs = _get_kwargs( reminder_id=reminder_id, -minutes=minutes, - + minutes=minutes, ) - response = await client.get_async_httpx_client().request( - **kwargs - ) + response = await client.get_async_httpx_client().request(**kwargs) return _build_response(client=client, response=response) + async def asyncio( reminder_id: UUID, *, client: AuthenticatedClient, minutes: int | Unset = 30, - ) -> Any | HTTPValidationError | None: - """ Snooze Reminder + """Snooze Reminder Snooze a reminder. @@ -195,12 +177,12 @@ async def asyncio( Returns: Any | HTTPValidationError - """ - - - return (await asyncio_detailed( - reminder_id=reminder_id, -client=client, -minutes=minutes, - - )).parsed + """ + + return ( + await asyncio_detailed( + reminder_id=reminder_id, + client=client, + minutes=minutes, + ) + ).parsed diff --git a/kindred-sdk/personal_crm_client/api/reminders/reminders_update_reminder.py b/kindred-sdk/personal_crm_client/api/reminders/reminders_update_reminder.py index 6bcbddd5..00d48d0e 100644 --- a/kindred-sdk/personal_crm_client/api/reminders/reminders_update_reminder.py +++ b/kindred-sdk/personal_crm_client/api/reminders/reminders_update_reminder.py @@ -1,62 +1,51 @@ from http import HTTPStatus -from typing import Any, cast +from typing import Any from urllib.parse import quote +from uuid import UUID import httpx -from ...client import AuthenticatedClient, Client -from ...types import Response, UNSET from ... import errors - +from ...client import AuthenticatedClient, Client from ...models.http_validation_error import HTTPValidationError from ...models.reminder_public import ReminderPublic from ...models.reminder_update import ReminderUpdate -from typing import cast -from uuid import UUID - +from ...types import Response def _get_kwargs( reminder_id: UUID, *, body: ReminderUpdate, - ) -> dict[str, Any]: headers: dict[str, Any] = {} - - - - - _kwargs: dict[str, Any] = { "method": "patch", - "url": "/api/v1/reminders/{reminder_id}".format(reminder_id=quote(str(reminder_id), safe=""),), + "url": "/api/v1/reminders/{reminder_id}".format( + reminder_id=quote(str(reminder_id), safe=""), + ), } _kwargs["json"] = body.to_dict() - headers["Content-Type"] = "application/json" _kwargs["headers"] = headers return _kwargs - -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> HTTPValidationError | ReminderPublic | None: +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> HTTPValidationError | ReminderPublic | None: if response.status_code == 200: response_200 = ReminderPublic.from_dict(response.json()) - - return response_200 if response.status_code == 422: response_422 = HTTPValidationError.from_dict(response.json()) - - return response_422 if client.raise_on_unexpected_status: @@ -65,7 +54,9 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[HTTPValidationError | ReminderPublic]: +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[HTTPValidationError | ReminderPublic]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -79,9 +70,8 @@ def sync_detailed( *, client: AuthenticatedClient, body: ReminderUpdate, - ) -> Response[HTTPValidationError | ReminderPublic]: - """ Update Reminder + """Update Reminder Update a reminder. @@ -95,13 +85,11 @@ def sync_detailed( Returns: Response[HTTPValidationError | ReminderPublic] - """ - + """ kwargs = _get_kwargs( reminder_id=reminder_id, -body=body, - + body=body, ) response = client.get_httpx_client().request( @@ -110,14 +98,14 @@ def sync_detailed( return _build_response(client=client, response=response) + def sync( reminder_id: UUID, *, client: AuthenticatedClient, body: ReminderUpdate, - ) -> HTTPValidationError | ReminderPublic | None: - """ Update Reminder + """Update Reminder Update a reminder. @@ -131,24 +119,22 @@ def sync( Returns: HTTPValidationError | ReminderPublic - """ - + """ return sync_detailed( reminder_id=reminder_id, -client=client, -body=body, - + client=client, + body=body, ).parsed + async def asyncio_detailed( reminder_id: UUID, *, client: AuthenticatedClient, body: ReminderUpdate, - ) -> Response[HTTPValidationError | ReminderPublic]: - """ Update Reminder + """Update Reminder Update a reminder. @@ -162,29 +148,25 @@ async def asyncio_detailed( Returns: Response[HTTPValidationError | ReminderPublic] - """ - + """ kwargs = _get_kwargs( reminder_id=reminder_id, -body=body, - + body=body, ) - response = await client.get_async_httpx_client().request( - **kwargs - ) + response = await client.get_async_httpx_client().request(**kwargs) return _build_response(client=client, response=response) + async def asyncio( reminder_id: UUID, *, client: AuthenticatedClient, body: ReminderUpdate, - ) -> HTTPValidationError | ReminderPublic | None: - """ Update Reminder + """Update Reminder Update a reminder. @@ -198,12 +180,12 @@ async def asyncio( Returns: HTTPValidationError | ReminderPublic - """ - - - return (await asyncio_detailed( - reminder_id=reminder_id, -client=client, -body=body, - - )).parsed + """ + + return ( + await asyncio_detailed( + reminder_id=reminder_id, + client=client, + body=body, + ) + ).parsed diff --git a/kindred-sdk/personal_crm_client/api/tag_shares/__init__.py b/kindred-sdk/personal_crm_client/api/tag_shares/__init__.py index c9921b5f..2d7c0b23 100644 --- a/kindred-sdk/personal_crm_client/api/tag_shares/__init__.py +++ b/kindred-sdk/personal_crm_client/api/tag_shares/__init__.py @@ -1 +1 @@ -""" Contains endpoint functions for accessing the API """ +"""Contains endpoint functions for accessing the API""" diff --git a/kindred-sdk/personal_crm_client/api/tag_shares/tag_shares_create_tag_share.py b/kindred-sdk/personal_crm_client/api/tag_shares/tag_shares_create_tag_share.py index 3662a95b..54fea929 100644 --- a/kindred-sdk/personal_crm_client/api/tag_shares/tag_shares_create_tag_share.py +++ b/kindred-sdk/personal_crm_client/api/tag_shares/tag_shares_create_tag_share.py @@ -1,32 +1,22 @@ from http import HTTPStatus -from typing import Any, cast -from urllib.parse import quote +from typing import Any import httpx -from ...client import AuthenticatedClient, Client -from ...types import Response, UNSET from ... import errors - +from ...client import AuthenticatedClient, Client from ...models.http_validation_error import HTTPValidationError from ...models.share_in import ShareIn from ...models.tag_share_public import TagSharePublic -from typing import cast - +from ...types import Response def _get_kwargs( *, body: ShareIn, - ) -> dict[str, Any]: headers: dict[str, Any] = {} - - - - - _kwargs: dict[str, Any] = { "method": "post", "url": "/api/v1/tag-shares/", @@ -34,27 +24,23 @@ def _get_kwargs( _kwargs["json"] = body.to_dict() - headers["Content-Type"] = "application/json" _kwargs["headers"] = headers return _kwargs - -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> HTTPValidationError | TagSharePublic | None: +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> HTTPValidationError | TagSharePublic | None: if response.status_code == 200: response_200 = TagSharePublic.from_dict(response.json()) - - return response_200 if response.status_code == 422: response_422 = HTTPValidationError.from_dict(response.json()) - - return response_422 if client.raise_on_unexpected_status: @@ -63,7 +49,9 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[HTTPValidationError | TagSharePublic]: +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[HTTPValidationError | TagSharePublic]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -76,9 +64,8 @@ def sync_detailed( *, client: AuthenticatedClient, body: ShareIn, - ) -> Response[HTTPValidationError | TagSharePublic]: - """ Create Tag Share + """Create Tag Share Args: body (ShareIn): @@ -89,12 +76,10 @@ def sync_detailed( Returns: Response[HTTPValidationError | TagSharePublic] - """ - + """ kwargs = _get_kwargs( body=body, - ) response = client.get_httpx_client().request( @@ -103,13 +88,13 @@ def sync_detailed( return _build_response(client=client, response=response) + def sync( *, client: AuthenticatedClient, body: ShareIn, - ) -> HTTPValidationError | TagSharePublic | None: - """ Create Tag Share + """Create Tag Share Args: body (ShareIn): @@ -120,22 +105,20 @@ def sync( Returns: HTTPValidationError | TagSharePublic - """ - + """ return sync_detailed( client=client, -body=body, - + body=body, ).parsed + async def asyncio_detailed( *, client: AuthenticatedClient, body: ShareIn, - ) -> Response[HTTPValidationError | TagSharePublic]: - """ Create Tag Share + """Create Tag Share Args: body (ShareIn): @@ -146,27 +129,23 @@ async def asyncio_detailed( Returns: Response[HTTPValidationError | TagSharePublic] - """ - + """ kwargs = _get_kwargs( body=body, - ) - response = await client.get_async_httpx_client().request( - **kwargs - ) + response = await client.get_async_httpx_client().request(**kwargs) return _build_response(client=client, response=response) + async def asyncio( *, client: AuthenticatedClient, body: ShareIn, - ) -> HTTPValidationError | TagSharePublic | None: - """ Create Tag Share + """Create Tag Share Args: body (ShareIn): @@ -177,11 +156,11 @@ async def asyncio( Returns: HTTPValidationError | TagSharePublic - """ + """ - - return (await asyncio_detailed( - client=client, -body=body, - - )).parsed + return ( + await asyncio_detailed( + client=client, + body=body, + ) + ).parsed diff --git a/kindred-sdk/personal_crm_client/api/tag_shares/tag_shares_delete_tag_share.py b/kindred-sdk/personal_crm_client/api/tag_shares/tag_shares_delete_tag_share.py index edbb4352..df8f1630 100644 --- a/kindred-sdk/personal_crm_client/api/tag_shares/tag_shares_delete_tag_share.py +++ b/kindred-sdk/personal_crm_client/api/tag_shares/tag_shares_delete_tag_share.py @@ -1,54 +1,45 @@ from http import HTTPStatus -from typing import Any, cast +from typing import Any from urllib.parse import quote +from uuid import UUID import httpx -from ...client import AuthenticatedClient, Client -from ...types import Response, UNSET from ... import errors - +from ...client import AuthenticatedClient, Client from ...models.http_validation_error import HTTPValidationError -from ...models.tag_shares_delete_tag_share_response_tag_shares_delete_tag_share import TagSharesDeleteTagShareResponseTagSharesDeleteTagShare -from typing import cast -from uuid import UUID - +from ...models.tag_shares_delete_tag_share_response_tag_shares_delete_tag_share import ( + TagSharesDeleteTagShareResponseTagSharesDeleteTagShare, +) +from ...types import Response def _get_kwargs( tag_id: UUID, grantee_id: UUID, - ) -> dict[str, Any]: - - - - - - _kwargs: dict[str, Any] = { "method": "delete", - "url": "/api/v1/tag-shares/{tag_id}/{grantee_id}".format(tag_id=quote(str(tag_id), safe=""),grantee_id=quote(str(grantee_id), safe=""),), + "url": "/api/v1/tag-shares/{tag_id}/{grantee_id}".format( + tag_id=quote(str(tag_id), safe=""), + grantee_id=quote(str(grantee_id), safe=""), + ), } - return _kwargs - -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> HTTPValidationError | TagSharesDeleteTagShareResponseTagSharesDeleteTagShare | None: +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> HTTPValidationError | TagSharesDeleteTagShareResponseTagSharesDeleteTagShare | None: if response.status_code == 200: response_200 = TagSharesDeleteTagShareResponseTagSharesDeleteTagShare.from_dict(response.json()) - - return response_200 if response.status_code == 422: response_422 = HTTPValidationError.from_dict(response.json()) - - return response_422 if client.raise_on_unexpected_status: @@ -57,7 +48,9 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[HTTPValidationError | TagSharesDeleteTagShareResponseTagSharesDeleteTagShare]: +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[HTTPValidationError | TagSharesDeleteTagShareResponseTagSharesDeleteTagShare]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -71,9 +64,8 @@ def sync_detailed( grantee_id: UUID, *, client: AuthenticatedClient, - ) -> Response[HTTPValidationError | TagSharesDeleteTagShareResponseTagSharesDeleteTagShare]: - """ Delete Tag Share + """Delete Tag Share Args: tag_id (UUID): @@ -85,13 +77,11 @@ def sync_detailed( Returns: Response[HTTPValidationError | TagSharesDeleteTagShareResponseTagSharesDeleteTagShare] - """ - + """ kwargs = _get_kwargs( tag_id=tag_id, -grantee_id=grantee_id, - + grantee_id=grantee_id, ) response = client.get_httpx_client().request( @@ -100,14 +90,14 @@ def sync_detailed( return _build_response(client=client, response=response) + def sync( tag_id: UUID, grantee_id: UUID, *, client: AuthenticatedClient, - ) -> HTTPValidationError | TagSharesDeleteTagShareResponseTagSharesDeleteTagShare | None: - """ Delete Tag Share + """Delete Tag Share Args: tag_id (UUID): @@ -119,24 +109,22 @@ def sync( Returns: HTTPValidationError | TagSharesDeleteTagShareResponseTagSharesDeleteTagShare - """ - + """ return sync_detailed( tag_id=tag_id, -grantee_id=grantee_id, -client=client, - + grantee_id=grantee_id, + client=client, ).parsed + async def asyncio_detailed( tag_id: UUID, grantee_id: UUID, *, client: AuthenticatedClient, - ) -> Response[HTTPValidationError | TagSharesDeleteTagShareResponseTagSharesDeleteTagShare]: - """ Delete Tag Share + """Delete Tag Share Args: tag_id (UUID): @@ -148,29 +136,25 @@ async def asyncio_detailed( Returns: Response[HTTPValidationError | TagSharesDeleteTagShareResponseTagSharesDeleteTagShare] - """ - + """ kwargs = _get_kwargs( tag_id=tag_id, -grantee_id=grantee_id, - + grantee_id=grantee_id, ) - response = await client.get_async_httpx_client().request( - **kwargs - ) + response = await client.get_async_httpx_client().request(**kwargs) return _build_response(client=client, response=response) + async def asyncio( tag_id: UUID, grantee_id: UUID, *, client: AuthenticatedClient, - ) -> HTTPValidationError | TagSharesDeleteTagShareResponseTagSharesDeleteTagShare | None: - """ Delete Tag Share + """Delete Tag Share Args: tag_id (UUID): @@ -182,12 +166,12 @@ async def asyncio( Returns: HTTPValidationError | TagSharesDeleteTagShareResponseTagSharesDeleteTagShare - """ - - - return (await asyncio_detailed( - tag_id=tag_id, -grantee_id=grantee_id, -client=client, - - )).parsed + """ + + return ( + await asyncio_detailed( + tag_id=tag_id, + grantee_id=grantee_id, + client=client, + ) + ).parsed diff --git a/kindred-sdk/personal_crm_client/api/tag_shares/tag_shares_list_tag_shares.py b/kindred-sdk/personal_crm_client/api/tag_shares/tag_shares_list_tag_shares.py index 8897b158..bce63277 100644 --- a/kindred-sdk/personal_crm_client/api/tag_shares/tag_shares_list_tag_shares.py +++ b/kindred-sdk/personal_crm_client/api/tag_shares/tag_shares_list_tag_shares.py @@ -1,62 +1,47 @@ from http import HTTPStatus -from typing import Any, cast -from urllib.parse import quote +from typing import Any +from uuid import UUID import httpx -from ...client import AuthenticatedClient, Client -from ...types import Response, UNSET from ... import errors - +from ...client import AuthenticatedClient, Client from ...models.http_validation_error import HTTPValidationError from ...models.tag_shares_public import TagSharesPublic -from typing import cast -from uuid import UUID - +from ...types import UNSET, Response def _get_kwargs( *, tag_id: UUID, - ) -> dict[str, Any]: - - - - params: dict[str, Any] = {} json_tag_id = str(tag_id) params["tag_id"] = json_tag_id - params = {k: v for k, v in params.items() if v is not UNSET and v is not None} - _kwargs: dict[str, Any] = { "method": "get", "url": "/api/v1/tag-shares/", "params": params, } - return _kwargs - -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> HTTPValidationError | TagSharesPublic | None: +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> HTTPValidationError | TagSharesPublic | None: if response.status_code == 200: response_200 = TagSharesPublic.from_dict(response.json()) - - return response_200 if response.status_code == 422: response_422 = HTTPValidationError.from_dict(response.json()) - - return response_422 if client.raise_on_unexpected_status: @@ -65,7 +50,9 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[HTTPValidationError | TagSharesPublic]: +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[HTTPValidationError | TagSharesPublic]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -78,9 +65,8 @@ def sync_detailed( *, client: AuthenticatedClient, tag_id: UUID, - ) -> Response[HTTPValidationError | TagSharesPublic]: - """ List Tag Shares + """List Tag Shares Args: tag_id (UUID): @@ -91,12 +77,10 @@ def sync_detailed( Returns: Response[HTTPValidationError | TagSharesPublic] - """ - + """ kwargs = _get_kwargs( tag_id=tag_id, - ) response = client.get_httpx_client().request( @@ -105,13 +89,13 @@ def sync_detailed( return _build_response(client=client, response=response) + def sync( *, client: AuthenticatedClient, tag_id: UUID, - ) -> HTTPValidationError | TagSharesPublic | None: - """ List Tag Shares + """List Tag Shares Args: tag_id (UUID): @@ -122,22 +106,20 @@ def sync( Returns: HTTPValidationError | TagSharesPublic - """ - + """ return sync_detailed( client=client, -tag_id=tag_id, - + tag_id=tag_id, ).parsed + async def asyncio_detailed( *, client: AuthenticatedClient, tag_id: UUID, - ) -> Response[HTTPValidationError | TagSharesPublic]: - """ List Tag Shares + """List Tag Shares Args: tag_id (UUID): @@ -148,27 +130,23 @@ async def asyncio_detailed( Returns: Response[HTTPValidationError | TagSharesPublic] - """ - + """ kwargs = _get_kwargs( tag_id=tag_id, - ) - response = await client.get_async_httpx_client().request( - **kwargs - ) + response = await client.get_async_httpx_client().request(**kwargs) return _build_response(client=client, response=response) + async def asyncio( *, client: AuthenticatedClient, tag_id: UUID, - ) -> HTTPValidationError | TagSharesPublic | None: - """ List Tag Shares + """List Tag Shares Args: tag_id (UUID): @@ -179,11 +157,11 @@ async def asyncio( Returns: HTTPValidationError | TagSharesPublic - """ + """ - - return (await asyncio_detailed( - client=client, -tag_id=tag_id, - - )).parsed + return ( + await asyncio_detailed( + client=client, + tag_id=tag_id, + ) + ).parsed diff --git a/kindred-sdk/personal_crm_client/api/tags/__init__.py b/kindred-sdk/personal_crm_client/api/tags/__init__.py index c9921b5f..2d7c0b23 100644 --- a/kindred-sdk/personal_crm_client/api/tags/__init__.py +++ b/kindred-sdk/personal_crm_client/api/tags/__init__.py @@ -1 +1 @@ -""" Contains endpoint functions for accessing the API """ +"""Contains endpoint functions for accessing the API""" diff --git a/kindred-sdk/personal_crm_client/api/tags/tags_create_tag_route.py b/kindred-sdk/personal_crm_client/api/tags/tags_create_tag_route.py index 08a06629..f60d4991 100644 --- a/kindred-sdk/personal_crm_client/api/tags/tags_create_tag_route.py +++ b/kindred-sdk/personal_crm_client/api/tags/tags_create_tag_route.py @@ -1,32 +1,22 @@ from http import HTTPStatus -from typing import Any, cast -from urllib.parse import quote +from typing import Any import httpx -from ...client import AuthenticatedClient, Client -from ...types import Response, UNSET from ... import errors - +from ...client import AuthenticatedClient, Client from ...models.http_validation_error import HTTPValidationError from ...models.tag_create import TagCreate from ...models.tag_public import TagPublic -from typing import cast - +from ...types import Response def _get_kwargs( *, body: TagCreate, - ) -> dict[str, Any]: headers: dict[str, Any] = {} - - - - - _kwargs: dict[str, Any] = { "method": "post", "url": "/api/v1/tags/", @@ -34,27 +24,23 @@ def _get_kwargs( _kwargs["json"] = body.to_dict() - headers["Content-Type"] = "application/json" _kwargs["headers"] = headers return _kwargs - -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> HTTPValidationError | TagPublic | None: +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> HTTPValidationError | TagPublic | None: if response.status_code == 200: response_200 = TagPublic.from_dict(response.json()) - - return response_200 if response.status_code == 422: response_422 = HTTPValidationError.from_dict(response.json()) - - return response_422 if client.raise_on_unexpected_status: @@ -63,7 +49,9 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[HTTPValidationError | TagPublic]: +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[HTTPValidationError | TagPublic]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -76,9 +64,8 @@ def sync_detailed( *, client: AuthenticatedClient, body: TagCreate, - ) -> Response[HTTPValidationError | TagPublic]: - """ Create Tag Route + """Create Tag Route Create a new tag. @@ -91,12 +78,10 @@ def sync_detailed( Returns: Response[HTTPValidationError | TagPublic] - """ - + """ kwargs = _get_kwargs( body=body, - ) response = client.get_httpx_client().request( @@ -105,13 +90,13 @@ def sync_detailed( return _build_response(client=client, response=response) + def sync( *, client: AuthenticatedClient, body: TagCreate, - ) -> HTTPValidationError | TagPublic | None: - """ Create Tag Route + """Create Tag Route Create a new tag. @@ -124,22 +109,20 @@ def sync( Returns: HTTPValidationError | TagPublic - """ - + """ return sync_detailed( client=client, -body=body, - + body=body, ).parsed + async def asyncio_detailed( *, client: AuthenticatedClient, body: TagCreate, - ) -> Response[HTTPValidationError | TagPublic]: - """ Create Tag Route + """Create Tag Route Create a new tag. @@ -152,27 +135,23 @@ async def asyncio_detailed( Returns: Response[HTTPValidationError | TagPublic] - """ - + """ kwargs = _get_kwargs( body=body, - ) - response = await client.get_async_httpx_client().request( - **kwargs - ) + response = await client.get_async_httpx_client().request(**kwargs) return _build_response(client=client, response=response) + async def asyncio( *, client: AuthenticatedClient, body: TagCreate, - ) -> HTTPValidationError | TagPublic | None: - """ Create Tag Route + """Create Tag Route Create a new tag. @@ -185,11 +164,11 @@ async def asyncio( Returns: HTTPValidationError | TagPublic - """ + """ - - return (await asyncio_detailed( - client=client, -body=body, - - )).parsed + return ( + await asyncio_detailed( + client=client, + body=body, + ) + ).parsed diff --git a/kindred-sdk/personal_crm_client/api/tags/tags_delete_tag.py b/kindred-sdk/personal_crm_client/api/tags/tags_delete_tag.py index f55e1067..06354676 100644 --- a/kindred-sdk/personal_crm_client/api/tags/tags_delete_tag.py +++ b/kindred-sdk/personal_crm_client/api/tags/tags_delete_tag.py @@ -1,40 +1,32 @@ from http import HTTPStatus -from typing import Any, cast +from typing import Any from urllib.parse import quote +from uuid import UUID import httpx -from ...client import AuthenticatedClient, Client -from ...types import Response, UNSET from ... import errors - +from ...client import AuthenticatedClient, Client from ...models.http_validation_error import HTTPValidationError -from typing import cast -from uuid import UUID - +from ...types import Response def _get_kwargs( tag_id: UUID, - ) -> dict[str, Any]: - - - - - - _kwargs: dict[str, Any] = { "method": "delete", - "url": "/api/v1/tags/{tag_id}".format(tag_id=quote(str(tag_id), safe=""),), + "url": "/api/v1/tags/{tag_id}".format( + tag_id=quote(str(tag_id), safe=""), + ), } - return _kwargs - -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Any | HTTPValidationError | None: +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Any | HTTPValidationError | None: if response.status_code == 200: response_200 = response.json() return response_200 @@ -42,8 +34,6 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res if response.status_code == 422: response_422 = HTTPValidationError.from_dict(response.json()) - - return response_422 if client.raise_on_unexpected_status: @@ -52,7 +42,9 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[Any | HTTPValidationError]: +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[Any | HTTPValidationError]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -65,9 +57,8 @@ def sync_detailed( tag_id: UUID, *, client: AuthenticatedClient, - ) -> Response[Any | HTTPValidationError]: - """ Delete Tag + """Delete Tag Delete a tag. @@ -80,12 +71,10 @@ def sync_detailed( Returns: Response[Any | HTTPValidationError] - """ - + """ kwargs = _get_kwargs( tag_id=tag_id, - ) response = client.get_httpx_client().request( @@ -94,13 +83,13 @@ def sync_detailed( return _build_response(client=client, response=response) + def sync( tag_id: UUID, *, client: AuthenticatedClient, - ) -> Any | HTTPValidationError | None: - """ Delete Tag + """Delete Tag Delete a tag. @@ -113,22 +102,20 @@ def sync( Returns: Any | HTTPValidationError - """ - + """ return sync_detailed( tag_id=tag_id, -client=client, - + client=client, ).parsed + async def asyncio_detailed( tag_id: UUID, *, client: AuthenticatedClient, - ) -> Response[Any | HTTPValidationError]: - """ Delete Tag + """Delete Tag Delete a tag. @@ -141,27 +128,23 @@ async def asyncio_detailed( Returns: Response[Any | HTTPValidationError] - """ - + """ kwargs = _get_kwargs( tag_id=tag_id, - ) - response = await client.get_async_httpx_client().request( - **kwargs - ) + response = await client.get_async_httpx_client().request(**kwargs) return _build_response(client=client, response=response) + async def asyncio( tag_id: UUID, *, client: AuthenticatedClient, - ) -> Any | HTTPValidationError | None: - """ Delete Tag + """Delete Tag Delete a tag. @@ -174,11 +157,11 @@ async def asyncio( Returns: Any | HTTPValidationError - """ + """ - - return (await asyncio_detailed( - tag_id=tag_id, -client=client, - - )).parsed + return ( + await asyncio_detailed( + tag_id=tag_id, + client=client, + ) + ).parsed diff --git a/kindred-sdk/personal_crm_client/api/tags/tags_list_tags.py b/kindred-sdk/personal_crm_client/api/tags/tags_list_tags.py index 8be5bbbd..4f65599e 100644 --- a/kindred-sdk/personal_crm_client/api/tags/tags_list_tags.py +++ b/kindred-sdk/personal_crm_client/api/tags/tags_list_tags.py @@ -1,64 +1,48 @@ from http import HTTPStatus -from typing import Any, cast -from urllib.parse import quote +from typing import Any import httpx -from ...client import AuthenticatedClient, Client -from ...types import Response, UNSET from ... import errors - +from ...client import AuthenticatedClient, Client from ...models.http_validation_error import HTTPValidationError from ...models.tags_public import TagsPublic -from ...types import UNSET, Unset -from typing import cast - +from ...types import UNSET, Response, Unset def _get_kwargs( *, skip: int | Unset = 0, limit: int | Unset = 100, - ) -> dict[str, Any]: - - - - params: dict[str, Any] = {} params["skip"] = skip params["limit"] = limit - params = {k: v for k, v in params.items() if v is not UNSET and v is not None} - _kwargs: dict[str, Any] = { "method": "get", "url": "/api/v1/tags/", "params": params, } - return _kwargs - -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> HTTPValidationError | TagsPublic | None: +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> HTTPValidationError | TagsPublic | None: if response.status_code == 200: response_200 = TagsPublic.from_dict(response.json()) - - return response_200 if response.status_code == 422: response_422 = HTTPValidationError.from_dict(response.json()) - - return response_422 if client.raise_on_unexpected_status: @@ -67,7 +51,9 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[HTTPValidationError | TagsPublic]: +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[HTTPValidationError | TagsPublic]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -81,9 +67,8 @@ def sync_detailed( client: AuthenticatedClient, skip: int | Unset = 0, limit: int | Unset = 100, - ) -> Response[HTTPValidationError | TagsPublic]: - """ List Tags + """List Tags List all tags for the current user. @@ -97,13 +82,11 @@ def sync_detailed( Returns: Response[HTTPValidationError | TagsPublic] - """ - + """ kwargs = _get_kwargs( skip=skip, -limit=limit, - + limit=limit, ) response = client.get_httpx_client().request( @@ -112,14 +95,14 @@ def sync_detailed( return _build_response(client=client, response=response) + def sync( *, client: AuthenticatedClient, skip: int | Unset = 0, limit: int | Unset = 100, - ) -> HTTPValidationError | TagsPublic | None: - """ List Tags + """List Tags List all tags for the current user. @@ -133,24 +116,22 @@ def sync( Returns: HTTPValidationError | TagsPublic - """ - + """ return sync_detailed( client=client, -skip=skip, -limit=limit, - + skip=skip, + limit=limit, ).parsed + async def asyncio_detailed( *, client: AuthenticatedClient, skip: int | Unset = 0, limit: int | Unset = 100, - ) -> Response[HTTPValidationError | TagsPublic]: - """ List Tags + """List Tags List all tags for the current user. @@ -164,29 +145,25 @@ async def asyncio_detailed( Returns: Response[HTTPValidationError | TagsPublic] - """ - + """ kwargs = _get_kwargs( skip=skip, -limit=limit, - + limit=limit, ) - response = await client.get_async_httpx_client().request( - **kwargs - ) + response = await client.get_async_httpx_client().request(**kwargs) return _build_response(client=client, response=response) + async def asyncio( *, client: AuthenticatedClient, skip: int | Unset = 0, limit: int | Unset = 100, - ) -> HTTPValidationError | TagsPublic | None: - """ List Tags + """List Tags List all tags for the current user. @@ -200,12 +177,12 @@ async def asyncio( Returns: HTTPValidationError | TagsPublic - """ - - - return (await asyncio_detailed( - client=client, -skip=skip, -limit=limit, - - )).parsed + """ + + return ( + await asyncio_detailed( + client=client, + skip=skip, + limit=limit, + ) + ).parsed diff --git a/kindred-sdk/personal_crm_client/api/tags/tags_update_tag.py b/kindred-sdk/personal_crm_client/api/tags/tags_update_tag.py index bfd333c9..8d36a038 100644 --- a/kindred-sdk/personal_crm_client/api/tags/tags_update_tag.py +++ b/kindred-sdk/personal_crm_client/api/tags/tags_update_tag.py @@ -1,62 +1,51 @@ from http import HTTPStatus -from typing import Any, cast +from typing import Any from urllib.parse import quote +from uuid import UUID import httpx -from ...client import AuthenticatedClient, Client -from ...types import Response, UNSET from ... import errors - +from ...client import AuthenticatedClient, Client from ...models.http_validation_error import HTTPValidationError from ...models.tag_public import TagPublic from ...models.tag_update import TagUpdate -from typing import cast -from uuid import UUID - +from ...types import Response def _get_kwargs( tag_id: UUID, *, body: TagUpdate, - ) -> dict[str, Any]: headers: dict[str, Any] = {} - - - - - _kwargs: dict[str, Any] = { "method": "patch", - "url": "/api/v1/tags/{tag_id}".format(tag_id=quote(str(tag_id), safe=""),), + "url": "/api/v1/tags/{tag_id}".format( + tag_id=quote(str(tag_id), safe=""), + ), } _kwargs["json"] = body.to_dict() - headers["Content-Type"] = "application/json" _kwargs["headers"] = headers return _kwargs - -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> HTTPValidationError | TagPublic | None: +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> HTTPValidationError | TagPublic | None: if response.status_code == 200: response_200 = TagPublic.from_dict(response.json()) - - return response_200 if response.status_code == 422: response_422 = HTTPValidationError.from_dict(response.json()) - - return response_422 if client.raise_on_unexpected_status: @@ -65,7 +54,9 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[HTTPValidationError | TagPublic]: +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[HTTPValidationError | TagPublic]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -79,9 +70,8 @@ def sync_detailed( *, client: AuthenticatedClient, body: TagUpdate, - ) -> Response[HTTPValidationError | TagPublic]: - """ Update Tag + """Update Tag Update a tag. @@ -95,13 +85,11 @@ def sync_detailed( Returns: Response[HTTPValidationError | TagPublic] - """ - + """ kwargs = _get_kwargs( tag_id=tag_id, -body=body, - + body=body, ) response = client.get_httpx_client().request( @@ -110,14 +98,14 @@ def sync_detailed( return _build_response(client=client, response=response) + def sync( tag_id: UUID, *, client: AuthenticatedClient, body: TagUpdate, - ) -> HTTPValidationError | TagPublic | None: - """ Update Tag + """Update Tag Update a tag. @@ -131,24 +119,22 @@ def sync( Returns: HTTPValidationError | TagPublic - """ - + """ return sync_detailed( tag_id=tag_id, -client=client, -body=body, - + client=client, + body=body, ).parsed + async def asyncio_detailed( tag_id: UUID, *, client: AuthenticatedClient, body: TagUpdate, - ) -> Response[HTTPValidationError | TagPublic]: - """ Update Tag + """Update Tag Update a tag. @@ -162,29 +148,25 @@ async def asyncio_detailed( Returns: Response[HTTPValidationError | TagPublic] - """ - + """ kwargs = _get_kwargs( tag_id=tag_id, -body=body, - + body=body, ) - response = await client.get_async_httpx_client().request( - **kwargs - ) + response = await client.get_async_httpx_client().request(**kwargs) return _build_response(client=client, response=response) + async def asyncio( tag_id: UUID, *, client: AuthenticatedClient, body: TagUpdate, - ) -> HTTPValidationError | TagPublic | None: - """ Update Tag + """Update Tag Update a tag. @@ -198,12 +180,12 @@ async def asyncio( Returns: HTTPValidationError | TagPublic - """ - - - return (await asyncio_detailed( - tag_id=tag_id, -client=client, -body=body, - - )).parsed + """ + + return ( + await asyncio_detailed( + tag_id=tag_id, + client=client, + body=body, + ) + ).parsed diff --git a/kindred-sdk/personal_crm_client/api/users/__init__.py b/kindred-sdk/personal_crm_client/api/users/__init__.py index c9921b5f..2d7c0b23 100644 --- a/kindred-sdk/personal_crm_client/api/users/__init__.py +++ b/kindred-sdk/personal_crm_client/api/users/__init__.py @@ -1 +1 @@ -""" Contains endpoint functions for accessing the API """ +"""Contains endpoint functions for accessing the API""" diff --git a/kindred-sdk/personal_crm_client/api/users/users_create_user.py b/kindred-sdk/personal_crm_client/api/users/users_create_user.py index 509c398c..b4a86065 100644 --- a/kindred-sdk/personal_crm_client/api/users/users_create_user.py +++ b/kindred-sdk/personal_crm_client/api/users/users_create_user.py @@ -1,32 +1,22 @@ from http import HTTPStatus -from typing import Any, cast -from urllib.parse import quote +from typing import Any import httpx -from ...client import AuthenticatedClient, Client -from ...types import Response, UNSET from ... import errors - +from ...client import AuthenticatedClient, Client from ...models.http_validation_error import HTTPValidationError from ...models.user_create import UserCreate from ...models.user_public import UserPublic -from typing import cast - +from ...types import Response def _get_kwargs( *, body: UserCreate, - ) -> dict[str, Any]: headers: dict[str, Any] = {} - - - - - _kwargs: dict[str, Any] = { "method": "post", "url": "/api/v1/users/", @@ -34,27 +24,23 @@ def _get_kwargs( _kwargs["json"] = body.to_dict() - headers["Content-Type"] = "application/json" _kwargs["headers"] = headers return _kwargs - -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> HTTPValidationError | UserPublic | None: +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> HTTPValidationError | UserPublic | None: if response.status_code == 200: response_200 = UserPublic.from_dict(response.json()) - - return response_200 if response.status_code == 422: response_422 = HTTPValidationError.from_dict(response.json()) - - return response_422 if client.raise_on_unexpected_status: @@ -63,7 +49,9 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[HTTPValidationError | UserPublic]: +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[HTTPValidationError | UserPublic]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -76,9 +64,8 @@ def sync_detailed( *, client: AuthenticatedClient, body: UserCreate, - ) -> Response[HTTPValidationError | UserPublic]: - """ Create User + """Create User Create new user. @@ -91,12 +78,10 @@ def sync_detailed( Returns: Response[HTTPValidationError | UserPublic] - """ - + """ kwargs = _get_kwargs( body=body, - ) response = client.get_httpx_client().request( @@ -105,13 +90,13 @@ def sync_detailed( return _build_response(client=client, response=response) + def sync( *, client: AuthenticatedClient, body: UserCreate, - ) -> HTTPValidationError | UserPublic | None: - """ Create User + """Create User Create new user. @@ -124,22 +109,20 @@ def sync( Returns: HTTPValidationError | UserPublic - """ - + """ return sync_detailed( client=client, -body=body, - + body=body, ).parsed + async def asyncio_detailed( *, client: AuthenticatedClient, body: UserCreate, - ) -> Response[HTTPValidationError | UserPublic]: - """ Create User + """Create User Create new user. @@ -152,27 +135,23 @@ async def asyncio_detailed( Returns: Response[HTTPValidationError | UserPublic] - """ - + """ kwargs = _get_kwargs( body=body, - ) - response = await client.get_async_httpx_client().request( - **kwargs - ) + response = await client.get_async_httpx_client().request(**kwargs) return _build_response(client=client, response=response) + async def asyncio( *, client: AuthenticatedClient, body: UserCreate, - ) -> HTTPValidationError | UserPublic | None: - """ Create User + """Create User Create new user. @@ -185,11 +164,11 @@ async def asyncio( Returns: HTTPValidationError | UserPublic - """ + """ - - return (await asyncio_detailed( - client=client, -body=body, - - )).parsed + return ( + await asyncio_detailed( + client=client, + body=body, + ) + ).parsed diff --git a/kindred-sdk/personal_crm_client/api/users/users_delete_user.py b/kindred-sdk/personal_crm_client/api/users/users_delete_user.py index a23219b1..0cee1989 100644 --- a/kindred-sdk/personal_crm_client/api/users/users_delete_user.py +++ b/kindred-sdk/personal_crm_client/api/users/users_delete_user.py @@ -1,53 +1,41 @@ from http import HTTPStatus -from typing import Any, cast +from typing import Any from urllib.parse import quote +from uuid import UUID import httpx -from ...client import AuthenticatedClient, Client -from ...types import Response, UNSET from ... import errors - +from ...client import AuthenticatedClient, Client from ...models.http_validation_error import HTTPValidationError from ...models.message import Message -from typing import cast -from uuid import UUID - +from ...types import Response def _get_kwargs( user_id: UUID, - ) -> dict[str, Any]: - - - - - - _kwargs: dict[str, Any] = { "method": "delete", - "url": "/api/v1/users/{user_id}".format(user_id=quote(str(user_id), safe=""),), + "url": "/api/v1/users/{user_id}".format( + user_id=quote(str(user_id), safe=""), + ), } - return _kwargs - -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> HTTPValidationError | Message | None: +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> HTTPValidationError | Message | None: if response.status_code == 200: response_200 = Message.from_dict(response.json()) - - return response_200 if response.status_code == 422: response_422 = HTTPValidationError.from_dict(response.json()) - - return response_422 if client.raise_on_unexpected_status: @@ -56,7 +44,9 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[HTTPValidationError | Message]: +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[HTTPValidationError | Message]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -69,9 +59,8 @@ def sync_detailed( user_id: UUID, *, client: AuthenticatedClient, - ) -> Response[HTTPValidationError | Message]: - """ Delete User + """Delete User Delete a user. @@ -84,12 +73,10 @@ def sync_detailed( Returns: Response[HTTPValidationError | Message] - """ - + """ kwargs = _get_kwargs( user_id=user_id, - ) response = client.get_httpx_client().request( @@ -98,13 +85,13 @@ def sync_detailed( return _build_response(client=client, response=response) + def sync( user_id: UUID, *, client: AuthenticatedClient, - ) -> HTTPValidationError | Message | None: - """ Delete User + """Delete User Delete a user. @@ -117,22 +104,20 @@ def sync( Returns: HTTPValidationError | Message - """ - + """ return sync_detailed( user_id=user_id, -client=client, - + client=client, ).parsed + async def asyncio_detailed( user_id: UUID, *, client: AuthenticatedClient, - ) -> Response[HTTPValidationError | Message]: - """ Delete User + """Delete User Delete a user. @@ -145,27 +130,23 @@ async def asyncio_detailed( Returns: Response[HTTPValidationError | Message] - """ - + """ kwargs = _get_kwargs( user_id=user_id, - ) - response = await client.get_async_httpx_client().request( - **kwargs - ) + response = await client.get_async_httpx_client().request(**kwargs) return _build_response(client=client, response=response) + async def asyncio( user_id: UUID, *, client: AuthenticatedClient, - ) -> HTTPValidationError | Message | None: - """ Delete User + """Delete User Delete a user. @@ -178,11 +159,11 @@ async def asyncio( Returns: HTTPValidationError | Message - """ + """ - - return (await asyncio_detailed( - user_id=user_id, -client=client, - - )).parsed + return ( + await asyncio_detailed( + user_id=user_id, + client=client, + ) + ).parsed diff --git a/kindred-sdk/personal_crm_client/api/users/users_delete_user_me.py b/kindred-sdk/personal_crm_client/api/users/users_delete_user_me.py index 057cb443..f7c4386f 100644 --- a/kindred-sdk/personal_crm_client/api/users/users_delete_user_me.py +++ b/kindred-sdk/personal_crm_client/api/users/users_delete_user_me.py @@ -1,43 +1,27 @@ from http import HTTPStatus -from typing import Any, cast -from urllib.parse import quote +from typing import Any import httpx -from ...client import AuthenticatedClient, Client -from ...types import Response, UNSET from ... import errors - +from ...client import AuthenticatedClient, Client from ...models.message import Message -from typing import cast - +from ...types import Response -def _get_kwargs( - -) -> dict[str, Any]: - - - - - - +def _get_kwargs() -> dict[str, Any]: _kwargs: dict[str, Any] = { "method": "delete", "url": "/api/v1/users/me", } - return _kwargs - def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Message | None: if response.status_code == 200: response_200 = Message.from_dict(response.json()) - - return response_200 if client.raise_on_unexpected_status: @@ -58,9 +42,8 @@ def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Res def sync_detailed( *, client: AuthenticatedClient, - ) -> Response[Message]: - """ Delete User Me + """Delete User Me Delete own user. @@ -70,12 +53,9 @@ def sync_detailed( Returns: Response[Message] - """ + """ - - kwargs = _get_kwargs( - - ) + kwargs = _get_kwargs() response = client.get_httpx_client().request( **kwargs, @@ -83,12 +63,12 @@ def sync_detailed( return _build_response(client=client, response=response) + def sync( *, client: AuthenticatedClient, - ) -> Message | None: - """ Delete User Me + """Delete User Me Delete own user. @@ -98,20 +78,18 @@ def sync( Returns: Message - """ - + """ return sync_detailed( client=client, - ).parsed + async def asyncio_detailed( *, client: AuthenticatedClient, - ) -> Response[Message]: - """ Delete User Me + """Delete User Me Delete own user. @@ -121,25 +99,20 @@ async def asyncio_detailed( Returns: Response[Message] - """ - + """ - kwargs = _get_kwargs( - - ) + kwargs = _get_kwargs() - response = await client.get_async_httpx_client().request( - **kwargs - ) + response = await client.get_async_httpx_client().request(**kwargs) return _build_response(client=client, response=response) + async def asyncio( *, client: AuthenticatedClient, - ) -> Message | None: - """ Delete User Me + """Delete User Me Delete own user. @@ -149,10 +122,10 @@ async def asyncio( Returns: Message - """ - + """ - return (await asyncio_detailed( - client=client, - - )).parsed + return ( + await asyncio_detailed( + client=client, + ) + ).parsed diff --git a/kindred-sdk/personal_crm_client/api/users/users_read_user_by_id.py b/kindred-sdk/personal_crm_client/api/users/users_read_user_by_id.py index eeaaaa84..99c38406 100644 --- a/kindred-sdk/personal_crm_client/api/users/users_read_user_by_id.py +++ b/kindred-sdk/personal_crm_client/api/users/users_read_user_by_id.py @@ -1,53 +1,41 @@ from http import HTTPStatus -from typing import Any, cast +from typing import Any from urllib.parse import quote +from uuid import UUID import httpx -from ...client import AuthenticatedClient, Client -from ...types import Response, UNSET from ... import errors - +from ...client import AuthenticatedClient, Client from ...models.http_validation_error import HTTPValidationError from ...models.user_public import UserPublic -from typing import cast -from uuid import UUID - +from ...types import Response def _get_kwargs( user_id: UUID, - ) -> dict[str, Any]: - - - - - - _kwargs: dict[str, Any] = { "method": "get", - "url": "/api/v1/users/{user_id}".format(user_id=quote(str(user_id), safe=""),), + "url": "/api/v1/users/{user_id}".format( + user_id=quote(str(user_id), safe=""), + ), } - return _kwargs - -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> HTTPValidationError | UserPublic | None: +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> HTTPValidationError | UserPublic | None: if response.status_code == 200: response_200 = UserPublic.from_dict(response.json()) - - return response_200 if response.status_code == 422: response_422 = HTTPValidationError.from_dict(response.json()) - - return response_422 if client.raise_on_unexpected_status: @@ -56,7 +44,9 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[HTTPValidationError | UserPublic]: +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[HTTPValidationError | UserPublic]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -69,9 +59,8 @@ def sync_detailed( user_id: UUID, *, client: AuthenticatedClient, - ) -> Response[HTTPValidationError | UserPublic]: - """ Read User By Id + """Read User By Id Get a specific user by id. @@ -84,12 +73,10 @@ def sync_detailed( Returns: Response[HTTPValidationError | UserPublic] - """ - + """ kwargs = _get_kwargs( user_id=user_id, - ) response = client.get_httpx_client().request( @@ -98,13 +85,13 @@ def sync_detailed( return _build_response(client=client, response=response) + def sync( user_id: UUID, *, client: AuthenticatedClient, - ) -> HTTPValidationError | UserPublic | None: - """ Read User By Id + """Read User By Id Get a specific user by id. @@ -117,22 +104,20 @@ def sync( Returns: HTTPValidationError | UserPublic - """ - + """ return sync_detailed( user_id=user_id, -client=client, - + client=client, ).parsed + async def asyncio_detailed( user_id: UUID, *, client: AuthenticatedClient, - ) -> Response[HTTPValidationError | UserPublic]: - """ Read User By Id + """Read User By Id Get a specific user by id. @@ -145,27 +130,23 @@ async def asyncio_detailed( Returns: Response[HTTPValidationError | UserPublic] - """ - + """ kwargs = _get_kwargs( user_id=user_id, - ) - response = await client.get_async_httpx_client().request( - **kwargs - ) + response = await client.get_async_httpx_client().request(**kwargs) return _build_response(client=client, response=response) + async def asyncio( user_id: UUID, *, client: AuthenticatedClient, - ) -> HTTPValidationError | UserPublic | None: - """ Read User By Id + """Read User By Id Get a specific user by id. @@ -178,11 +159,11 @@ async def asyncio( Returns: HTTPValidationError | UserPublic - """ + """ - - return (await asyncio_detailed( - user_id=user_id, -client=client, - - )).parsed + return ( + await asyncio_detailed( + user_id=user_id, + client=client, + ) + ).parsed diff --git a/kindred-sdk/personal_crm_client/api/users/users_read_user_me.py b/kindred-sdk/personal_crm_client/api/users/users_read_user_me.py index bceb829d..325079cb 100644 --- a/kindred-sdk/personal_crm_client/api/users/users_read_user_me.py +++ b/kindred-sdk/personal_crm_client/api/users/users_read_user_me.py @@ -1,43 +1,27 @@ from http import HTTPStatus -from typing import Any, cast -from urllib.parse import quote +from typing import Any import httpx -from ...client import AuthenticatedClient, Client -from ...types import Response, UNSET from ... import errors - +from ...client import AuthenticatedClient, Client from ...models.user_public import UserPublic -from typing import cast - +from ...types import Response -def _get_kwargs( - -) -> dict[str, Any]: - - - - - - +def _get_kwargs() -> dict[str, Any]: _kwargs: dict[str, Any] = { "method": "get", "url": "/api/v1/users/me", } - return _kwargs - def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> UserPublic | None: if response.status_code == 200: response_200 = UserPublic.from_dict(response.json()) - - return response_200 if client.raise_on_unexpected_status: @@ -58,9 +42,8 @@ def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Res def sync_detailed( *, client: AuthenticatedClient, - ) -> Response[UserPublic]: - """ Read User Me + """Read User Me Get current user. @@ -70,12 +53,9 @@ def sync_detailed( Returns: Response[UserPublic] - """ + """ - - kwargs = _get_kwargs( - - ) + kwargs = _get_kwargs() response = client.get_httpx_client().request( **kwargs, @@ -83,12 +63,12 @@ def sync_detailed( return _build_response(client=client, response=response) + def sync( *, client: AuthenticatedClient, - ) -> UserPublic | None: - """ Read User Me + """Read User Me Get current user. @@ -98,20 +78,18 @@ def sync( Returns: UserPublic - """ - + """ return sync_detailed( client=client, - ).parsed + async def asyncio_detailed( *, client: AuthenticatedClient, - ) -> Response[UserPublic]: - """ Read User Me + """Read User Me Get current user. @@ -121,25 +99,20 @@ async def asyncio_detailed( Returns: Response[UserPublic] - """ - + """ - kwargs = _get_kwargs( - - ) + kwargs = _get_kwargs() - response = await client.get_async_httpx_client().request( - **kwargs - ) + response = await client.get_async_httpx_client().request(**kwargs) return _build_response(client=client, response=response) + async def asyncio( *, client: AuthenticatedClient, - ) -> UserPublic | None: - """ Read User Me + """Read User Me Get current user. @@ -149,10 +122,10 @@ async def asyncio( Returns: UserPublic - """ - + """ - return (await asyncio_detailed( - client=client, - - )).parsed + return ( + await asyncio_detailed( + client=client, + ) + ).parsed diff --git a/kindred-sdk/personal_crm_client/api/users/users_read_users.py b/kindred-sdk/personal_crm_client/api/users/users_read_users.py index ed8fa140..10d72a29 100644 --- a/kindred-sdk/personal_crm_client/api/users/users_read_users.py +++ b/kindred-sdk/personal_crm_client/api/users/users_read_users.py @@ -1,64 +1,48 @@ from http import HTTPStatus -from typing import Any, cast -from urllib.parse import quote +from typing import Any import httpx -from ...client import AuthenticatedClient, Client -from ...types import Response, UNSET from ... import errors - +from ...client import AuthenticatedClient, Client from ...models.http_validation_error import HTTPValidationError from ...models.users_public import UsersPublic -from ...types import UNSET, Unset -from typing import cast - +from ...types import UNSET, Response, Unset def _get_kwargs( *, skip: int | Unset = 0, limit: int | Unset = 100, - ) -> dict[str, Any]: - - - - params: dict[str, Any] = {} params["skip"] = skip params["limit"] = limit - params = {k: v for k, v in params.items() if v is not UNSET and v is not None} - _kwargs: dict[str, Any] = { "method": "get", "url": "/api/v1/users/", "params": params, } - return _kwargs - -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> HTTPValidationError | UsersPublic | None: +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> HTTPValidationError | UsersPublic | None: if response.status_code == 200: response_200 = UsersPublic.from_dict(response.json()) - - return response_200 if response.status_code == 422: response_422 = HTTPValidationError.from_dict(response.json()) - - return response_422 if client.raise_on_unexpected_status: @@ -67,7 +51,9 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[HTTPValidationError | UsersPublic]: +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[HTTPValidationError | UsersPublic]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -81,9 +67,8 @@ def sync_detailed( client: AuthenticatedClient, skip: int | Unset = 0, limit: int | Unset = 100, - ) -> Response[HTTPValidationError | UsersPublic]: - """ Read Users + """Read Users Retrieve users. @@ -97,13 +82,11 @@ def sync_detailed( Returns: Response[HTTPValidationError | UsersPublic] - """ - + """ kwargs = _get_kwargs( skip=skip, -limit=limit, - + limit=limit, ) response = client.get_httpx_client().request( @@ -112,14 +95,14 @@ def sync_detailed( return _build_response(client=client, response=response) + def sync( *, client: AuthenticatedClient, skip: int | Unset = 0, limit: int | Unset = 100, - ) -> HTTPValidationError | UsersPublic | None: - """ Read Users + """Read Users Retrieve users. @@ -133,24 +116,22 @@ def sync( Returns: HTTPValidationError | UsersPublic - """ - + """ return sync_detailed( client=client, -skip=skip, -limit=limit, - + skip=skip, + limit=limit, ).parsed + async def asyncio_detailed( *, client: AuthenticatedClient, skip: int | Unset = 0, limit: int | Unset = 100, - ) -> Response[HTTPValidationError | UsersPublic]: - """ Read Users + """Read Users Retrieve users. @@ -164,29 +145,25 @@ async def asyncio_detailed( Returns: Response[HTTPValidationError | UsersPublic] - """ - + """ kwargs = _get_kwargs( skip=skip, -limit=limit, - + limit=limit, ) - response = await client.get_async_httpx_client().request( - **kwargs - ) + response = await client.get_async_httpx_client().request(**kwargs) return _build_response(client=client, response=response) + async def asyncio( *, client: AuthenticatedClient, skip: int | Unset = 0, limit: int | Unset = 100, - ) -> HTTPValidationError | UsersPublic | None: - """ Read Users + """Read Users Retrieve users. @@ -200,12 +177,12 @@ async def asyncio( Returns: HTTPValidationError | UsersPublic - """ - - - return (await asyncio_detailed( - client=client, -skip=skip, -limit=limit, - - )).parsed + """ + + return ( + await asyncio_detailed( + client=client, + skip=skip, + limit=limit, + ) + ).parsed diff --git a/kindred-sdk/personal_crm_client/api/users/users_register_user.py b/kindred-sdk/personal_crm_client/api/users/users_register_user.py index 664abefa..33a016da 100644 --- a/kindred-sdk/personal_crm_client/api/users/users_register_user.py +++ b/kindred-sdk/personal_crm_client/api/users/users_register_user.py @@ -1,32 +1,22 @@ from http import HTTPStatus -from typing import Any, cast -from urllib.parse import quote +from typing import Any import httpx -from ...client import AuthenticatedClient, Client -from ...types import Response, UNSET from ... import errors - +from ...client import AuthenticatedClient, Client from ...models.http_validation_error import HTTPValidationError from ...models.user_public import UserPublic from ...models.user_register import UserRegister -from typing import cast - +from ...types import Response def _get_kwargs( *, body: UserRegister, - ) -> dict[str, Any]: headers: dict[str, Any] = {} - - - - - _kwargs: dict[str, Any] = { "method": "post", "url": "/api/v1/users/signup", @@ -34,27 +24,23 @@ def _get_kwargs( _kwargs["json"] = body.to_dict() - headers["Content-Type"] = "application/json" _kwargs["headers"] = headers return _kwargs - -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> HTTPValidationError | UserPublic | None: +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> HTTPValidationError | UserPublic | None: if response.status_code == 200: response_200 = UserPublic.from_dict(response.json()) - - return response_200 if response.status_code == 422: response_422 = HTTPValidationError.from_dict(response.json()) - - return response_422 if client.raise_on_unexpected_status: @@ -63,7 +49,9 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[HTTPValidationError | UserPublic]: +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[HTTPValidationError | UserPublic]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -76,9 +64,8 @@ def sync_detailed( *, client: AuthenticatedClient | Client, body: UserRegister, - ) -> Response[HTTPValidationError | UserPublic]: - """ Register User + """Register User Create new user without the need to be logged in. @@ -91,12 +78,10 @@ def sync_detailed( Returns: Response[HTTPValidationError | UserPublic] - """ - + """ kwargs = _get_kwargs( body=body, - ) response = client.get_httpx_client().request( @@ -105,13 +90,13 @@ def sync_detailed( return _build_response(client=client, response=response) + def sync( *, client: AuthenticatedClient | Client, body: UserRegister, - ) -> HTTPValidationError | UserPublic | None: - """ Register User + """Register User Create new user without the need to be logged in. @@ -124,22 +109,20 @@ def sync( Returns: HTTPValidationError | UserPublic - """ - + """ return sync_detailed( client=client, -body=body, - + body=body, ).parsed + async def asyncio_detailed( *, client: AuthenticatedClient | Client, body: UserRegister, - ) -> Response[HTTPValidationError | UserPublic]: - """ Register User + """Register User Create new user without the need to be logged in. @@ -152,27 +135,23 @@ async def asyncio_detailed( Returns: Response[HTTPValidationError | UserPublic] - """ - + """ kwargs = _get_kwargs( body=body, - ) - response = await client.get_async_httpx_client().request( - **kwargs - ) + response = await client.get_async_httpx_client().request(**kwargs) return _build_response(client=client, response=response) + async def asyncio( *, client: AuthenticatedClient | Client, body: UserRegister, - ) -> HTTPValidationError | UserPublic | None: - """ Register User + """Register User Create new user without the need to be logged in. @@ -185,11 +164,11 @@ async def asyncio( Returns: HTTPValidationError | UserPublic - """ + """ - - return (await asyncio_detailed( - client=client, -body=body, - - )).parsed + return ( + await asyncio_detailed( + client=client, + body=body, + ) + ).parsed diff --git a/kindred-sdk/personal_crm_client/api/users/users_update_password_me.py b/kindred-sdk/personal_crm_client/api/users/users_update_password_me.py index 00fe0940..8df5fd29 100644 --- a/kindred-sdk/personal_crm_client/api/users/users_update_password_me.py +++ b/kindred-sdk/personal_crm_client/api/users/users_update_password_me.py @@ -1,32 +1,22 @@ from http import HTTPStatus -from typing import Any, cast -from urllib.parse import quote +from typing import Any import httpx -from ...client import AuthenticatedClient, Client -from ...types import Response, UNSET from ... import errors - +from ...client import AuthenticatedClient, Client from ...models.http_validation_error import HTTPValidationError from ...models.message import Message from ...models.update_password import UpdatePassword -from typing import cast - +from ...types import Response def _get_kwargs( *, body: UpdatePassword, - ) -> dict[str, Any]: headers: dict[str, Any] = {} - - - - - _kwargs: dict[str, Any] = { "method": "patch", "url": "/api/v1/users/me/password", @@ -34,27 +24,23 @@ def _get_kwargs( _kwargs["json"] = body.to_dict() - headers["Content-Type"] = "application/json" _kwargs["headers"] = headers return _kwargs - -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> HTTPValidationError | Message | None: +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> HTTPValidationError | Message | None: if response.status_code == 200: response_200 = Message.from_dict(response.json()) - - return response_200 if response.status_code == 422: response_422 = HTTPValidationError.from_dict(response.json()) - - return response_422 if client.raise_on_unexpected_status: @@ -63,7 +49,9 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[HTTPValidationError | Message]: +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[HTTPValidationError | Message]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -76,9 +64,8 @@ def sync_detailed( *, client: AuthenticatedClient, body: UpdatePassword, - ) -> Response[HTTPValidationError | Message]: - """ Update Password Me + """Update Password Me Update own password. @@ -91,12 +78,10 @@ def sync_detailed( Returns: Response[HTTPValidationError | Message] - """ - + """ kwargs = _get_kwargs( body=body, - ) response = client.get_httpx_client().request( @@ -105,13 +90,13 @@ def sync_detailed( return _build_response(client=client, response=response) + def sync( *, client: AuthenticatedClient, body: UpdatePassword, - ) -> HTTPValidationError | Message | None: - """ Update Password Me + """Update Password Me Update own password. @@ -124,22 +109,20 @@ def sync( Returns: HTTPValidationError | Message - """ - + """ return sync_detailed( client=client, -body=body, - + body=body, ).parsed + async def asyncio_detailed( *, client: AuthenticatedClient, body: UpdatePassword, - ) -> Response[HTTPValidationError | Message]: - """ Update Password Me + """Update Password Me Update own password. @@ -152,27 +135,23 @@ async def asyncio_detailed( Returns: Response[HTTPValidationError | Message] - """ - + """ kwargs = _get_kwargs( body=body, - ) - response = await client.get_async_httpx_client().request( - **kwargs - ) + response = await client.get_async_httpx_client().request(**kwargs) return _build_response(client=client, response=response) + async def asyncio( *, client: AuthenticatedClient, body: UpdatePassword, - ) -> HTTPValidationError | Message | None: - """ Update Password Me + """Update Password Me Update own password. @@ -185,11 +164,11 @@ async def asyncio( Returns: HTTPValidationError | Message - """ + """ - - return (await asyncio_detailed( - client=client, -body=body, - - )).parsed + return ( + await asyncio_detailed( + client=client, + body=body, + ) + ).parsed diff --git a/kindred-sdk/personal_crm_client/api/users/users_update_user.py b/kindred-sdk/personal_crm_client/api/users/users_update_user.py index be4f839f..3a13dd7f 100644 --- a/kindred-sdk/personal_crm_client/api/users/users_update_user.py +++ b/kindred-sdk/personal_crm_client/api/users/users_update_user.py @@ -1,62 +1,51 @@ from http import HTTPStatus -from typing import Any, cast +from typing import Any from urllib.parse import quote +from uuid import UUID import httpx -from ...client import AuthenticatedClient, Client -from ...types import Response, UNSET from ... import errors - +from ...client import AuthenticatedClient, Client from ...models.http_validation_error import HTTPValidationError from ...models.user_public import UserPublic from ...models.user_update import UserUpdate -from typing import cast -from uuid import UUID - +from ...types import Response def _get_kwargs( user_id: UUID, *, body: UserUpdate, - ) -> dict[str, Any]: headers: dict[str, Any] = {} - - - - - _kwargs: dict[str, Any] = { "method": "patch", - "url": "/api/v1/users/{user_id}".format(user_id=quote(str(user_id), safe=""),), + "url": "/api/v1/users/{user_id}".format( + user_id=quote(str(user_id), safe=""), + ), } _kwargs["json"] = body.to_dict() - headers["Content-Type"] = "application/json" _kwargs["headers"] = headers return _kwargs - -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> HTTPValidationError | UserPublic | None: +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> HTTPValidationError | UserPublic | None: if response.status_code == 200: response_200 = UserPublic.from_dict(response.json()) - - return response_200 if response.status_code == 422: response_422 = HTTPValidationError.from_dict(response.json()) - - return response_422 if client.raise_on_unexpected_status: @@ -65,7 +54,9 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[HTTPValidationError | UserPublic]: +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[HTTPValidationError | UserPublic]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -79,9 +70,8 @@ def sync_detailed( *, client: AuthenticatedClient, body: UserUpdate, - ) -> Response[HTTPValidationError | UserPublic]: - """ Update User + """Update User Update a user. @@ -95,13 +85,11 @@ def sync_detailed( Returns: Response[HTTPValidationError | UserPublic] - """ - + """ kwargs = _get_kwargs( user_id=user_id, -body=body, - + body=body, ) response = client.get_httpx_client().request( @@ -110,14 +98,14 @@ def sync_detailed( return _build_response(client=client, response=response) + def sync( user_id: UUID, *, client: AuthenticatedClient, body: UserUpdate, - ) -> HTTPValidationError | UserPublic | None: - """ Update User + """Update User Update a user. @@ -131,24 +119,22 @@ def sync( Returns: HTTPValidationError | UserPublic - """ - + """ return sync_detailed( user_id=user_id, -client=client, -body=body, - + client=client, + body=body, ).parsed + async def asyncio_detailed( user_id: UUID, *, client: AuthenticatedClient, body: UserUpdate, - ) -> Response[HTTPValidationError | UserPublic]: - """ Update User + """Update User Update a user. @@ -162,29 +148,25 @@ async def asyncio_detailed( Returns: Response[HTTPValidationError | UserPublic] - """ - + """ kwargs = _get_kwargs( user_id=user_id, -body=body, - + body=body, ) - response = await client.get_async_httpx_client().request( - **kwargs - ) + response = await client.get_async_httpx_client().request(**kwargs) return _build_response(client=client, response=response) + async def asyncio( user_id: UUID, *, client: AuthenticatedClient, body: UserUpdate, - ) -> HTTPValidationError | UserPublic | None: - """ Update User + """Update User Update a user. @@ -198,12 +180,12 @@ async def asyncio( Returns: HTTPValidationError | UserPublic - """ - - - return (await asyncio_detailed( - user_id=user_id, -client=client, -body=body, - - )).parsed + """ + + return ( + await asyncio_detailed( + user_id=user_id, + client=client, + body=body, + ) + ).parsed diff --git a/kindred-sdk/personal_crm_client/api/users/users_update_user_me.py b/kindred-sdk/personal_crm_client/api/users/users_update_user_me.py index a06570c0..3c9f95d4 100644 --- a/kindred-sdk/personal_crm_client/api/users/users_update_user_me.py +++ b/kindred-sdk/personal_crm_client/api/users/users_update_user_me.py @@ -1,32 +1,22 @@ from http import HTTPStatus -from typing import Any, cast -from urllib.parse import quote +from typing import Any import httpx -from ...client import AuthenticatedClient, Client -from ...types import Response, UNSET from ... import errors - +from ...client import AuthenticatedClient, Client from ...models.http_validation_error import HTTPValidationError from ...models.user_public import UserPublic from ...models.user_update_me import UserUpdateMe -from typing import cast - +from ...types import Response def _get_kwargs( *, body: UserUpdateMe, - ) -> dict[str, Any]: headers: dict[str, Any] = {} - - - - - _kwargs: dict[str, Any] = { "method": "patch", "url": "/api/v1/users/me", @@ -34,27 +24,23 @@ def _get_kwargs( _kwargs["json"] = body.to_dict() - headers["Content-Type"] = "application/json" _kwargs["headers"] = headers return _kwargs - -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> HTTPValidationError | UserPublic | None: +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> HTTPValidationError | UserPublic | None: if response.status_code == 200: response_200 = UserPublic.from_dict(response.json()) - - return response_200 if response.status_code == 422: response_422 = HTTPValidationError.from_dict(response.json()) - - return response_422 if client.raise_on_unexpected_status: @@ -63,7 +49,9 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[HTTPValidationError | UserPublic]: +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[HTTPValidationError | UserPublic]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -76,9 +64,8 @@ def sync_detailed( *, client: AuthenticatedClient, body: UserUpdateMe, - ) -> Response[HTTPValidationError | UserPublic]: - """ Update User Me + """Update User Me Update own user. @@ -91,12 +78,10 @@ def sync_detailed( Returns: Response[HTTPValidationError | UserPublic] - """ - + """ kwargs = _get_kwargs( body=body, - ) response = client.get_httpx_client().request( @@ -105,13 +90,13 @@ def sync_detailed( return _build_response(client=client, response=response) + def sync( *, client: AuthenticatedClient, body: UserUpdateMe, - ) -> HTTPValidationError | UserPublic | None: - """ Update User Me + """Update User Me Update own user. @@ -124,22 +109,20 @@ def sync( Returns: HTTPValidationError | UserPublic - """ - + """ return sync_detailed( client=client, -body=body, - + body=body, ).parsed + async def asyncio_detailed( *, client: AuthenticatedClient, body: UserUpdateMe, - ) -> Response[HTTPValidationError | UserPublic]: - """ Update User Me + """Update User Me Update own user. @@ -152,27 +135,23 @@ async def asyncio_detailed( Returns: Response[HTTPValidationError | UserPublic] - """ - + """ kwargs = _get_kwargs( body=body, - ) - response = await client.get_async_httpx_client().request( - **kwargs - ) + response = await client.get_async_httpx_client().request(**kwargs) return _build_response(client=client, response=response) + async def asyncio( *, client: AuthenticatedClient, body: UserUpdateMe, - ) -> HTTPValidationError | UserPublic | None: - """ Update User Me + """Update User Me Update own user. @@ -185,11 +164,11 @@ async def asyncio( Returns: HTTPValidationError | UserPublic - """ + """ - - return (await asyncio_detailed( - client=client, -body=body, - - )).parsed + return ( + await asyncio_detailed( + client=client, + body=body, + ) + ).parsed diff --git a/kindred-sdk/personal_crm_client/api/utils/__init__.py b/kindred-sdk/personal_crm_client/api/utils/__init__.py index c9921b5f..2d7c0b23 100644 --- a/kindred-sdk/personal_crm_client/api/utils/__init__.py +++ b/kindred-sdk/personal_crm_client/api/utils/__init__.py @@ -1 +1 @@ -""" Contains endpoint functions for accessing the API """ +"""Contains endpoint functions for accessing the API""" diff --git a/kindred-sdk/personal_crm_client/api/utils/utils_health_check.py b/kindred-sdk/personal_crm_client/api/utils/utils_health_check.py index 3e120223..5d38f389 100644 --- a/kindred-sdk/personal_crm_client/api/utils/utils_health_check.py +++ b/kindred-sdk/personal_crm_client/api/utils/utils_health_check.py @@ -1,35 +1,22 @@ from http import HTTPStatus from typing import Any, cast -from urllib.parse import quote import httpx -from ...client import AuthenticatedClient, Client -from ...types import Response, UNSET from ... import errors +from ...client import AuthenticatedClient, Client +from ...types import Response - - -def _get_kwargs( - -) -> dict[str, Any]: - - - - - - +def _get_kwargs() -> dict[str, Any]: _kwargs: dict[str, Any] = { "method": "get", "url": "/api/v1/utils/health-check/", } - return _kwargs - def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> bool | None: if response.status_code == 200: response_200 = cast(bool, response.json()) @@ -53,9 +40,8 @@ def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Res def sync_detailed( *, client: AuthenticatedClient | Client, - ) -> Response[bool]: - """ Health Check + """Health Check Raises: errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. @@ -63,12 +49,9 @@ def sync_detailed( Returns: Response[bool] - """ + """ - - kwargs = _get_kwargs( - - ) + kwargs = _get_kwargs() response = client.get_httpx_client().request( **kwargs, @@ -76,12 +59,12 @@ def sync_detailed( return _build_response(client=client, response=response) + def sync( *, client: AuthenticatedClient | Client, - ) -> bool | None: - """ Health Check + """Health Check Raises: errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. @@ -89,20 +72,18 @@ def sync( Returns: bool - """ - + """ return sync_detailed( client=client, - ).parsed + async def asyncio_detailed( *, client: AuthenticatedClient | Client, - ) -> Response[bool]: - """ Health Check + """Health Check Raises: errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. @@ -110,25 +91,20 @@ async def asyncio_detailed( Returns: Response[bool] - """ + """ + kwargs = _get_kwargs() - kwargs = _get_kwargs( - - ) - - response = await client.get_async_httpx_client().request( - **kwargs - ) + response = await client.get_async_httpx_client().request(**kwargs) return _build_response(client=client, response=response) + async def asyncio( *, client: AuthenticatedClient | Client, - ) -> bool | None: - """ Health Check + """Health Check Raises: errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. @@ -136,10 +112,10 @@ async def asyncio( Returns: bool - """ - + """ - return (await asyncio_detailed( - client=client, - - )).parsed + return ( + await asyncio_detailed( + client=client, + ) + ).parsed diff --git a/kindred-sdk/personal_crm_client/api/utils/utils_test_email.py b/kindred-sdk/personal_crm_client/api/utils/utils_test_email.py index fd1799ed..3db254b0 100644 --- a/kindred-sdk/personal_crm_client/api/utils/utils_test_email.py +++ b/kindred-sdk/personal_crm_client/api/utils/utils_test_email.py @@ -1,60 +1,45 @@ from http import HTTPStatus -from typing import Any, cast -from urllib.parse import quote +from typing import Any import httpx -from ...client import AuthenticatedClient, Client -from ...types import Response, UNSET from ... import errors - +from ...client import AuthenticatedClient, Client from ...models.http_validation_error import HTTPValidationError from ...models.message import Message -from typing import cast - +from ...types import UNSET, Response def _get_kwargs( *, email_to: str, - ) -> dict[str, Any]: - - - - params: dict[str, Any] = {} params["email_to"] = email_to - params = {k: v for k, v in params.items() if v is not UNSET and v is not None} - _kwargs: dict[str, Any] = { "method": "post", "url": "/api/v1/utils/test-email/", "params": params, } - return _kwargs - -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> HTTPValidationError | Message | None: +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> HTTPValidationError | Message | None: if response.status_code == 201: response_201 = Message.from_dict(response.json()) - - return response_201 if response.status_code == 422: response_422 = HTTPValidationError.from_dict(response.json()) - - return response_422 if client.raise_on_unexpected_status: @@ -63,7 +48,9 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[HTTPValidationError | Message]: +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[HTTPValidationError | Message]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -76,9 +63,8 @@ def sync_detailed( *, client: AuthenticatedClient, email_to: str, - ) -> Response[HTTPValidationError | Message]: - """ Test Email + """Test Email Test emails. @@ -91,12 +77,10 @@ def sync_detailed( Returns: Response[HTTPValidationError | Message] - """ - + """ kwargs = _get_kwargs( email_to=email_to, - ) response = client.get_httpx_client().request( @@ -105,13 +89,13 @@ def sync_detailed( return _build_response(client=client, response=response) + def sync( *, client: AuthenticatedClient, email_to: str, - ) -> HTTPValidationError | Message | None: - """ Test Email + """Test Email Test emails. @@ -124,22 +108,20 @@ def sync( Returns: HTTPValidationError | Message - """ - + """ return sync_detailed( client=client, -email_to=email_to, - + email_to=email_to, ).parsed + async def asyncio_detailed( *, client: AuthenticatedClient, email_to: str, - ) -> Response[HTTPValidationError | Message]: - """ Test Email + """Test Email Test emails. @@ -152,27 +134,23 @@ async def asyncio_detailed( Returns: Response[HTTPValidationError | Message] - """ - + """ kwargs = _get_kwargs( email_to=email_to, - ) - response = await client.get_async_httpx_client().request( - **kwargs - ) + response = await client.get_async_httpx_client().request(**kwargs) return _build_response(client=client, response=response) + async def asyncio( *, client: AuthenticatedClient, email_to: str, - ) -> HTTPValidationError | Message | None: - """ Test Email + """Test Email Test emails. @@ -185,11 +163,11 @@ async def asyncio( Returns: HTTPValidationError | Message - """ + """ - - return (await asyncio_detailed( - client=client, -email_to=email_to, - - )).parsed + return ( + await asyncio_detailed( + client=client, + email_to=email_to, + ) + ).parsed diff --git a/kindred-sdk/personal_crm_client/api/webhooks/__init__.py b/kindred-sdk/personal_crm_client/api/webhooks/__init__.py index c9921b5f..2d7c0b23 100644 --- a/kindred-sdk/personal_crm_client/api/webhooks/__init__.py +++ b/kindred-sdk/personal_crm_client/api/webhooks/__init__.py @@ -1 +1 @@ -""" Contains endpoint functions for accessing the API """ +"""Contains endpoint functions for accessing the API""" diff --git a/kindred-sdk/personal_crm_client/api/webhooks/webhooks_create_webhook.py b/kindred-sdk/personal_crm_client/api/webhooks/webhooks_create_webhook.py index c053835f..dc8720a8 100644 --- a/kindred-sdk/personal_crm_client/api/webhooks/webhooks_create_webhook.py +++ b/kindred-sdk/personal_crm_client/api/webhooks/webhooks_create_webhook.py @@ -1,31 +1,21 @@ from http import HTTPStatus -from typing import Any, cast -from urllib.parse import quote +from typing import Any import httpx -from ...client import AuthenticatedClient, Client -from ...types import Response, UNSET from ... import errors - +from ...client import AuthenticatedClient, Client from ...models.http_validation_error import HTTPValidationError from ...models.webhook_endpoint_base import WebhookEndpointBase -from typing import cast - +from ...types import Response def _get_kwargs( *, body: WebhookEndpointBase, - ) -> dict[str, Any]: headers: dict[str, Any] = {} - - - - - _kwargs: dict[str, Any] = { "method": "post", "url": "/api/v1/webhooks/", @@ -33,15 +23,15 @@ def _get_kwargs( _kwargs["json"] = body.to_dict() - headers["Content-Type"] = "application/json" _kwargs["headers"] = headers return _kwargs - -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Any | HTTPValidationError | None: +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Any | HTTPValidationError | None: if response.status_code == 200: response_200 = response.json() return response_200 @@ -49,8 +39,6 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res if response.status_code == 422: response_422 = HTTPValidationError.from_dict(response.json()) - - return response_422 if client.raise_on_unexpected_status: @@ -59,7 +47,9 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[Any | HTTPValidationError]: +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[Any | HTTPValidationError]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -72,9 +62,8 @@ def sync_detailed( *, client: AuthenticatedClient, body: WebhookEndpointBase, - ) -> Response[Any | HTTPValidationError]: - """ Create Webhook + """Create Webhook Create a new webhook endpoint. @@ -87,12 +76,10 @@ def sync_detailed( Returns: Response[Any | HTTPValidationError] - """ - + """ kwargs = _get_kwargs( body=body, - ) response = client.get_httpx_client().request( @@ -101,13 +88,13 @@ def sync_detailed( return _build_response(client=client, response=response) + def sync( *, client: AuthenticatedClient, body: WebhookEndpointBase, - ) -> Any | HTTPValidationError | None: - """ Create Webhook + """Create Webhook Create a new webhook endpoint. @@ -120,22 +107,20 @@ def sync( Returns: Any | HTTPValidationError - """ - + """ return sync_detailed( client=client, -body=body, - + body=body, ).parsed + async def asyncio_detailed( *, client: AuthenticatedClient, body: WebhookEndpointBase, - ) -> Response[Any | HTTPValidationError]: - """ Create Webhook + """Create Webhook Create a new webhook endpoint. @@ -148,27 +133,23 @@ async def asyncio_detailed( Returns: Response[Any | HTTPValidationError] - """ - + """ kwargs = _get_kwargs( body=body, - ) - response = await client.get_async_httpx_client().request( - **kwargs - ) + response = await client.get_async_httpx_client().request(**kwargs) return _build_response(client=client, response=response) + async def asyncio( *, client: AuthenticatedClient, body: WebhookEndpointBase, - ) -> Any | HTTPValidationError | None: - """ Create Webhook + """Create Webhook Create a new webhook endpoint. @@ -181,11 +162,11 @@ async def asyncio( Returns: Any | HTTPValidationError - """ + """ - - return (await asyncio_detailed( - client=client, -body=body, - - )).parsed + return ( + await asyncio_detailed( + client=client, + body=body, + ) + ).parsed diff --git a/kindred-sdk/personal_crm_client/api/webhooks/webhooks_delete_webhook.py b/kindred-sdk/personal_crm_client/api/webhooks/webhooks_delete_webhook.py index aca2cff4..aaf9740a 100644 --- a/kindred-sdk/personal_crm_client/api/webhooks/webhooks_delete_webhook.py +++ b/kindred-sdk/personal_crm_client/api/webhooks/webhooks_delete_webhook.py @@ -1,40 +1,32 @@ from http import HTTPStatus -from typing import Any, cast +from typing import Any from urllib.parse import quote +from uuid import UUID import httpx -from ...client import AuthenticatedClient, Client -from ...types import Response, UNSET from ... import errors - +from ...client import AuthenticatedClient, Client from ...models.http_validation_error import HTTPValidationError -from typing import cast -from uuid import UUID - +from ...types import Response def _get_kwargs( webhook_id: UUID, - ) -> dict[str, Any]: - - - - - - _kwargs: dict[str, Any] = { "method": "delete", - "url": "/api/v1/webhooks/{webhook_id}".format(webhook_id=quote(str(webhook_id), safe=""),), + "url": "/api/v1/webhooks/{webhook_id}".format( + webhook_id=quote(str(webhook_id), safe=""), + ), } - return _kwargs - -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Any | HTTPValidationError | None: +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Any | HTTPValidationError | None: if response.status_code == 200: response_200 = response.json() return response_200 @@ -42,8 +34,6 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res if response.status_code == 422: response_422 = HTTPValidationError.from_dict(response.json()) - - return response_422 if client.raise_on_unexpected_status: @@ -52,7 +42,9 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[Any | HTTPValidationError]: +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[Any | HTTPValidationError]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -65,9 +57,8 @@ def sync_detailed( webhook_id: UUID, *, client: AuthenticatedClient, - ) -> Response[Any | HTTPValidationError]: - """ Delete Webhook + """Delete Webhook Delete a webhook endpoint. @@ -80,12 +71,10 @@ def sync_detailed( Returns: Response[Any | HTTPValidationError] - """ - + """ kwargs = _get_kwargs( webhook_id=webhook_id, - ) response = client.get_httpx_client().request( @@ -94,13 +83,13 @@ def sync_detailed( return _build_response(client=client, response=response) + def sync( webhook_id: UUID, *, client: AuthenticatedClient, - ) -> Any | HTTPValidationError | None: - """ Delete Webhook + """Delete Webhook Delete a webhook endpoint. @@ -113,22 +102,20 @@ def sync( Returns: Any | HTTPValidationError - """ - + """ return sync_detailed( webhook_id=webhook_id, -client=client, - + client=client, ).parsed + async def asyncio_detailed( webhook_id: UUID, *, client: AuthenticatedClient, - ) -> Response[Any | HTTPValidationError]: - """ Delete Webhook + """Delete Webhook Delete a webhook endpoint. @@ -141,27 +128,23 @@ async def asyncio_detailed( Returns: Response[Any | HTTPValidationError] - """ - + """ kwargs = _get_kwargs( webhook_id=webhook_id, - ) - response = await client.get_async_httpx_client().request( - **kwargs - ) + response = await client.get_async_httpx_client().request(**kwargs) return _build_response(client=client, response=response) + async def asyncio( webhook_id: UUID, *, client: AuthenticatedClient, - ) -> Any | HTTPValidationError | None: - """ Delete Webhook + """Delete Webhook Delete a webhook endpoint. @@ -174,11 +157,11 @@ async def asyncio( Returns: Any | HTTPValidationError - """ + """ - - return (await asyncio_detailed( - webhook_id=webhook_id, -client=client, - - )).parsed + return ( + await asyncio_detailed( + webhook_id=webhook_id, + client=client, + ) + ).parsed diff --git a/kindred-sdk/personal_crm_client/api/webhooks/webhooks_inbound_webhook.py b/kindred-sdk/personal_crm_client/api/webhooks/webhooks_inbound_webhook.py index adb58b6b..b2462b75 100644 --- a/kindred-sdk/personal_crm_client/api/webhooks/webhooks_inbound_webhook.py +++ b/kindred-sdk/personal_crm_client/api/webhooks/webhooks_inbound_webhook.py @@ -1,48 +1,41 @@ from http import HTTPStatus -from typing import Any, cast +from typing import Any from urllib.parse import quote import httpx -from ...client import AuthenticatedClient, Client -from ...types import Response, UNSET from ... import errors - +from ...client import AuthenticatedClient, Client from ...models.http_validation_error import HTTPValidationError from ...models.webhooks_inbound_webhook_payload import WebhooksInboundWebhookPayload -from typing import cast - +from ...types import Response def _get_kwargs( api_key: str, *, body: WebhooksInboundWebhookPayload, - ) -> dict[str, Any]: headers: dict[str, Any] = {} - - - - - _kwargs: dict[str, Any] = { "method": "post", - "url": "/api/v1/webhooks/inbound/{api_key}".format(api_key=quote(str(api_key), safe=""),), + "url": "/api/v1/webhooks/inbound/{api_key}".format( + api_key=quote(str(api_key), safe=""), + ), } _kwargs["json"] = body.to_dict() - headers["Content-Type"] = "application/json" _kwargs["headers"] = headers return _kwargs - -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Any | HTTPValidationError | None: +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Any | HTTPValidationError | None: if response.status_code == 200: response_200 = response.json() return response_200 @@ -50,8 +43,6 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res if response.status_code == 422: response_422 = HTTPValidationError.from_dict(response.json()) - - return response_422 if client.raise_on_unexpected_status: @@ -60,7 +51,9 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[Any | HTTPValidationError]: +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[Any | HTTPValidationError]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -74,9 +67,8 @@ def sync_detailed( *, client: AuthenticatedClient | Client, body: WebhooksInboundWebhookPayload, - ) -> Response[Any | HTTPValidationError]: - r""" Inbound Webhook + r"""Inbound Webhook Inbound webhook receiver for external integrations (n8n, Aqara, etc.). @@ -99,13 +91,11 @@ def sync_detailed( Returns: Response[Any | HTTPValidationError] - """ - + """ kwargs = _get_kwargs( api_key=api_key, -body=body, - + body=body, ) response = client.get_httpx_client().request( @@ -114,14 +104,14 @@ def sync_detailed( return _build_response(client=client, response=response) + def sync( api_key: str, *, client: AuthenticatedClient | Client, body: WebhooksInboundWebhookPayload, - ) -> Any | HTTPValidationError | None: - r""" Inbound Webhook + r"""Inbound Webhook Inbound webhook receiver for external integrations (n8n, Aqara, etc.). @@ -144,24 +134,22 @@ def sync( Returns: Any | HTTPValidationError - """ - + """ return sync_detailed( api_key=api_key, -client=client, -body=body, - + client=client, + body=body, ).parsed + async def asyncio_detailed( api_key: str, *, client: AuthenticatedClient | Client, body: WebhooksInboundWebhookPayload, - ) -> Response[Any | HTTPValidationError]: - r""" Inbound Webhook + r"""Inbound Webhook Inbound webhook receiver for external integrations (n8n, Aqara, etc.). @@ -184,29 +172,25 @@ async def asyncio_detailed( Returns: Response[Any | HTTPValidationError] - """ - + """ kwargs = _get_kwargs( api_key=api_key, -body=body, - + body=body, ) - response = await client.get_async_httpx_client().request( - **kwargs - ) + response = await client.get_async_httpx_client().request(**kwargs) return _build_response(client=client, response=response) + async def asyncio( api_key: str, *, client: AuthenticatedClient | Client, body: WebhooksInboundWebhookPayload, - ) -> Any | HTTPValidationError | None: - r""" Inbound Webhook + r"""Inbound Webhook Inbound webhook receiver for external integrations (n8n, Aqara, etc.). @@ -229,12 +213,12 @@ async def asyncio( Returns: Any | HTTPValidationError - """ - - - return (await asyncio_detailed( - api_key=api_key, -client=client, -body=body, - - )).parsed + """ + + return ( + await asyncio_detailed( + api_key=api_key, + client=client, + body=body, + ) + ).parsed diff --git a/kindred-sdk/personal_crm_client/api/webhooks/webhooks_list_webhooks.py b/kindred-sdk/personal_crm_client/api/webhooks/webhooks_list_webhooks.py index 58c207c1..4404dbbd 100644 --- a/kindred-sdk/personal_crm_client/api/webhooks/webhooks_list_webhooks.py +++ b/kindred-sdk/personal_crm_client/api/webhooks/webhooks_list_webhooks.py @@ -1,35 +1,22 @@ from http import HTTPStatus -from typing import Any, cast -from urllib.parse import quote +from typing import Any import httpx -from ...client import AuthenticatedClient, Client -from ...types import Response, UNSET from ... import errors +from ...client import AuthenticatedClient, Client +from ...types import Response - - -def _get_kwargs( - -) -> dict[str, Any]: - - - - - - +def _get_kwargs() -> dict[str, Any]: _kwargs: dict[str, Any] = { "method": "get", "url": "/api/v1/webhooks/", } - return _kwargs - def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Any | None: if response.status_code == 200: return None @@ -52,9 +39,8 @@ def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Res def sync_detailed( *, client: AuthenticatedClient, - ) -> Response[Any]: - """ List Webhooks + """List Webhooks List all webhook endpoints for the user. @@ -64,12 +50,9 @@ def sync_detailed( Returns: Response[Any] - """ - + """ - kwargs = _get_kwargs( - - ) + kwargs = _get_kwargs() response = client.get_httpx_client().request( **kwargs, @@ -81,9 +64,8 @@ def sync_detailed( async def asyncio_detailed( *, client: AuthenticatedClient, - ) -> Response[Any]: - """ List Webhooks + """List Webhooks List all webhook endpoints for the user. @@ -93,16 +75,10 @@ async def asyncio_detailed( Returns: Response[Any] - """ + """ + kwargs = _get_kwargs() - kwargs = _get_kwargs( - - ) - - response = await client.get_async_httpx_client().request( - **kwargs - ) + response = await client.get_async_httpx_client().request(**kwargs) return _build_response(client=client, response=response) - diff --git a/kindred-sdk/personal_crm_client/api/webhooks/webhooks_update_webhook.py b/kindred-sdk/personal_crm_client/api/webhooks/webhooks_update_webhook.py index ddda750d..68305d86 100644 --- a/kindred-sdk/personal_crm_client/api/webhooks/webhooks_update_webhook.py +++ b/kindred-sdk/personal_crm_client/api/webhooks/webhooks_update_webhook.py @@ -1,49 +1,42 @@ from http import HTTPStatus -from typing import Any, cast +from typing import Any from urllib.parse import quote +from uuid import UUID import httpx -from ...client import AuthenticatedClient, Client -from ...types import Response, UNSET from ... import errors - +from ...client import AuthenticatedClient, Client from ...models.http_validation_error import HTTPValidationError from ...models.webhook_endpoint_base import WebhookEndpointBase -from typing import cast -from uuid import UUID - +from ...types import Response def _get_kwargs( webhook_id: UUID, *, body: WebhookEndpointBase, - ) -> dict[str, Any]: headers: dict[str, Any] = {} - - - - - _kwargs: dict[str, Any] = { "method": "patch", - "url": "/api/v1/webhooks/{webhook_id}".format(webhook_id=quote(str(webhook_id), safe=""),), + "url": "/api/v1/webhooks/{webhook_id}".format( + webhook_id=quote(str(webhook_id), safe=""), + ), } _kwargs["json"] = body.to_dict() - headers["Content-Type"] = "application/json" _kwargs["headers"] = headers return _kwargs - -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Any | HTTPValidationError | None: +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Any | HTTPValidationError | None: if response.status_code == 200: response_200 = response.json() return response_200 @@ -51,8 +44,6 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res if response.status_code == 422: response_422 = HTTPValidationError.from_dict(response.json()) - - return response_422 if client.raise_on_unexpected_status: @@ -61,7 +52,9 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[Any | HTTPValidationError]: +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[Any | HTTPValidationError]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -75,9 +68,8 @@ def sync_detailed( *, client: AuthenticatedClient, body: WebhookEndpointBase, - ) -> Response[Any | HTTPValidationError]: - """ Update Webhook + """Update Webhook Update a webhook endpoint. @@ -91,13 +83,11 @@ def sync_detailed( Returns: Response[Any | HTTPValidationError] - """ - + """ kwargs = _get_kwargs( webhook_id=webhook_id, -body=body, - + body=body, ) response = client.get_httpx_client().request( @@ -106,14 +96,14 @@ def sync_detailed( return _build_response(client=client, response=response) + def sync( webhook_id: UUID, *, client: AuthenticatedClient, body: WebhookEndpointBase, - ) -> Any | HTTPValidationError | None: - """ Update Webhook + """Update Webhook Update a webhook endpoint. @@ -127,24 +117,22 @@ def sync( Returns: Any | HTTPValidationError - """ - + """ return sync_detailed( webhook_id=webhook_id, -client=client, -body=body, - + client=client, + body=body, ).parsed + async def asyncio_detailed( webhook_id: UUID, *, client: AuthenticatedClient, body: WebhookEndpointBase, - ) -> Response[Any | HTTPValidationError]: - """ Update Webhook + """Update Webhook Update a webhook endpoint. @@ -158,29 +146,25 @@ async def asyncio_detailed( Returns: Response[Any | HTTPValidationError] - """ - + """ kwargs = _get_kwargs( webhook_id=webhook_id, -body=body, - + body=body, ) - response = await client.get_async_httpx_client().request( - **kwargs - ) + response = await client.get_async_httpx_client().request(**kwargs) return _build_response(client=client, response=response) + async def asyncio( webhook_id: UUID, *, client: AuthenticatedClient, body: WebhookEndpointBase, - ) -> Any | HTTPValidationError | None: - """ Update Webhook + """Update Webhook Update a webhook endpoint. @@ -194,12 +178,12 @@ async def asyncio( Returns: Any | HTTPValidationError - """ - - - return (await asyncio_detailed( - webhook_id=webhook_id, -client=client, -body=body, - - )).parsed + """ + + return ( + await asyncio_detailed( + webhook_id=webhook_id, + client=client, + body=body, + ) + ).parsed diff --git a/kindred-sdk/personal_crm_client/client.py b/kindred-sdk/personal_crm_client/client.py index 5eeb05a0..1b7055ab 100644 --- a/kindred-sdk/personal_crm_client/client.py +++ b/kindred-sdk/personal_crm_client/client.py @@ -1,11 +1,8 @@ import ssl from typing import Any -from attrs import define, field, evolve import httpx - - - +from attrs import define, evolve, field @define @@ -36,6 +33,7 @@ class Client: status code that was not documented in the source OpenAPI document. Can also be provided as a keyword argument to the constructor. """ + raise_on_unexpected_status: bool = field(default=False, kw_only=True) _base_url: str = field(alias="base_url") _cookies: dict[str, str] = field(factory=dict, kw_only=True, alias="cookies") @@ -268,4 +266,3 @@ async def __aenter__(self) -> "AuthenticatedClient": async def __aexit__(self, *args: Any, **kwargs: Any) -> None: """Exit a context manager for underlying httpx.AsyncClient (see httpx docs)""" await self.get_async_httpx_client().__aexit__(*args, **kwargs) - diff --git a/kindred-sdk/personal_crm_client/errors.py b/kindred-sdk/personal_crm_client/errors.py index b912123d..5f92e76a 100644 --- a/kindred-sdk/personal_crm_client/errors.py +++ b/kindred-sdk/personal_crm_client/errors.py @@ -1,4 +1,5 @@ -""" Contains shared errors types that can be raised from API functions """ +"""Contains shared errors types that can be raised from API functions""" + class UnexpectedStatus(Exception): """Raised by api functions when the response status an undocumented status and Client.raise_on_unexpected_status is True""" @@ -11,4 +12,5 @@ def __init__(self, status_code: int, content: bytes): f"Unexpected status code: {status_code}\n\nResponse content:\n{content.decode(errors='ignore')}" ) + __all__ = ["UnexpectedStatus"] diff --git a/kindred-sdk/personal_crm_client/models/__init__.py b/kindred-sdk/personal_crm_client/models/__init__.py index d8ad0e75..f7e56727 100644 --- a/kindred-sdk/personal_crm_client/models/__init__.py +++ b/kindred-sdk/personal_crm_client/models/__init__.py @@ -1,4 +1,4 @@ -""" Contains all the data models used in inputs/outputs """ +"""Contains all the data models used in inputs/outputs""" from .activity_log_public import ActivityLogPublic from .activity_log_public_changes_json_type_0 import ActivityLogPublicChangesJsonType0 @@ -74,7 +74,9 @@ from .relationship_create import RelationshipCreate from .relationship_public import RelationshipPublic from .relationship_update import RelationshipUpdate -from .relationships_lookup_inverse_response_relationships_lookup_inverse import RelationshipsLookupInverseResponseRelationshipsLookupInverse +from .relationships_lookup_inverse_response_relationships_lookup_inverse import ( + RelationshipsLookupInverseResponseRelationshipsLookupInverse, +) from .reminder_create import ReminderCreate from .reminder_frequency import ReminderFrequency from .reminder_public import ReminderPublic @@ -84,7 +86,9 @@ from .tag_create import TagCreate from .tag_public import TagPublic from .tag_share_public import TagSharePublic -from .tag_shares_delete_tag_share_response_tag_shares_delete_tag_share import TagSharesDeleteTagShareResponseTagSharesDeleteTagShare +from .tag_shares_delete_tag_share_response_tag_shares_delete_tag_share import ( + TagSharesDeleteTagShareResponseTagSharesDeleteTagShare, +) from .tag_shares_public import TagSharesPublic from .tag_update import TagUpdate from .tags_public import TagsPublic diff --git a/kindred-sdk/personal_crm_client/models/activity_log_public.py b/kindred-sdk/personal_crm_client/models/activity_log_public.py index 529b9df2..25b12606 100644 --- a/kindred-sdk/personal_crm_client/models/activity_log_public.py +++ b/kindred-sdk/personal_crm_client/models/activity_log_public.py @@ -1,42 +1,34 @@ from __future__ import annotations +import datetime from collections.abc import Mapping -from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator +from typing import TYPE_CHECKING, Any, TypeVar, cast +from uuid import UUID from attrs import define as _attrs_define from attrs import field as _attrs_field - -from ..types import UNSET, Unset - from dateutil.parser import isoparse -from typing import cast -from uuid import UUID -import datetime if TYPE_CHECKING: - from ..models.activity_log_public_changes_json_type_0 import ActivityLogPublicChangesJsonType0 - - - + from ..models.activity_log_public_changes_json_type_0 import ActivityLogPublicChangesJsonType0 T = TypeVar("T", bound="ActivityLogPublic") - @_attrs_define class ActivityLogPublic: - """ - Attributes: - id (UUID): - owner_id (UUID): - actor_id (None | UUID): - entity_type (str): - entity_id (UUID): - action (str): - changes_json (ActivityLogPublicChangesJsonType0 | None): - occurred_at (datetime.datetime): - """ + """ + Attributes: + id (UUID): + owner_id (UUID): + actor_id (None | UUID): + entity_type (str): + entity_id (UUID): + action (str): + changes_json (ActivityLogPublicChangesJsonType0 | None): + occurred_at (datetime.datetime): + """ id: UUID owner_id: UUID @@ -48,12 +40,9 @@ class ActivityLogPublic: occurred_at: datetime.datetime additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) - - - - def to_dict(self) -> dict[str, Any]: from ..models.activity_log_public_changes_json_type_0 import ActivityLogPublicChangesJsonType0 + id = str(self.id) owner_id = str(self.owner_id) @@ -78,38 +67,32 @@ def to_dict(self) -> dict[str, Any]: occurred_at = self.occurred_at.isoformat() - field_dict: dict[str, Any] = {} field_dict.update(self.additional_properties) - field_dict.update({ - "id": id, - "owner_id": owner_id, - "actor_id": actor_id, - "entity_type": entity_type, - "entity_id": entity_id, - "action": action, - "changes_json": changes_json, - "occurred_at": occurred_at, - }) + field_dict.update( + { + "id": id, + "owner_id": owner_id, + "actor_id": actor_id, + "entity_type": entity_type, + "entity_id": entity_id, + "action": action, + "changes_json": changes_json, + "occurred_at": occurred_at, + } + ) return field_dict - - @classmethod def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: from ..models.activity_log_public_changes_json_type_0 import ActivityLogPublicChangesJsonType0 + d = dict(src_dict) id = UUID(d.pop("id")) - - - owner_id = UUID(d.pop("owner_id")) - - - def _parse_actor_id(data: object) -> None | UUID: if data is None: return data @@ -118,8 +101,6 @@ def _parse_actor_id(data: object) -> None | UUID: raise TypeError() actor_id_type_0 = UUID(data) - - return actor_id_type_0 except (TypeError, ValueError, AttributeError, KeyError): pass @@ -127,14 +108,10 @@ def _parse_actor_id(data: object) -> None | UUID: actor_id = _parse_actor_id(d.pop("actor_id")) - entity_type = d.pop("entity_type") entity_id = UUID(d.pop("entity_id")) - - - action = d.pop("action") def _parse_changes_json(data: object) -> ActivityLogPublicChangesJsonType0 | None: @@ -145,8 +122,6 @@ def _parse_changes_json(data: object) -> ActivityLogPublicChangesJsonType0 | Non raise TypeError() changes_json_type_0 = ActivityLogPublicChangesJsonType0.from_dict(data) - - return changes_json_type_0 except (TypeError, ValueError, AttributeError, KeyError): pass @@ -154,12 +129,8 @@ def _parse_changes_json(data: object) -> ActivityLogPublicChangesJsonType0 | Non changes_json = _parse_changes_json(d.pop("changes_json")) - occurred_at = isoparse(d.pop("occurred_at")) - - - activity_log_public = cls( id=id, owner_id=owner_id, @@ -171,7 +142,6 @@ def _parse_changes_json(data: object) -> ActivityLogPublicChangesJsonType0 | Non occurred_at=occurred_at, ) - activity_log_public.additional_properties = d return activity_log_public diff --git a/kindred-sdk/personal_crm_client/models/activity_log_public_changes_json_type_0.py b/kindred-sdk/personal_crm_client/models/activity_log_public_changes_json_type_0.py index 8ea368f8..a69f6424 100644 --- a/kindred-sdk/personal_crm_client/models/activity_log_public_changes_json_type_0.py +++ b/kindred-sdk/personal_crm_client/models/activity_log_public_changes_json_type_0.py @@ -1,49 +1,30 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator +from typing import Any, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from ..types import UNSET, Unset - - - - - - - T = TypeVar("T", bound="ActivityLogPublicChangesJsonType0") - @_attrs_define class ActivityLogPublicChangesJsonType0: - """ - """ + """ """ additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) - - - - def to_dict(self) -> dict[str, Any]: - field_dict: dict[str, Any] = {} field_dict.update(self.additional_properties) return field_dict - - @classmethod def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: d = dict(src_dict) - activity_log_public_changes_json_type_0 = cls( - ) - + activity_log_public_changes_json_type_0 = cls() activity_log_public_changes_json_type_0.additional_properties = d return activity_log_public_changes_json_type_0 diff --git a/kindred-sdk/personal_crm_client/models/activity_logs_public.py b/kindred-sdk/personal_crm_client/models/activity_logs_public.py index f233f508..0a17b082 100644 --- a/kindred-sdk/personal_crm_client/models/activity_logs_public.py +++ b/kindred-sdk/personal_crm_client/models/activity_logs_public.py @@ -1,79 +1,61 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator +from typing import TYPE_CHECKING, Any, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from ..types import UNSET, Unset - -from typing import cast - if TYPE_CHECKING: - from ..models.activity_log_public import ActivityLogPublic - - - + from ..models.activity_log_public import ActivityLogPublic T = TypeVar("T", bound="ActivityLogsPublic") - @_attrs_define class ActivityLogsPublic: - """ - Attributes: - data (list[ActivityLogPublic]): - count (int): - """ + """ + Attributes: + data (list[ActivityLogPublic]): + count (int): + """ data: list[ActivityLogPublic] count: int additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) - - - - def to_dict(self) -> dict[str, Any]: - from ..models.activity_log_public import ActivityLogPublic data = [] for data_item_data in self.data: data_item = data_item_data.to_dict() data.append(data_item) - - count = self.count - field_dict: dict[str, Any] = {} field_dict.update(self.additional_properties) - field_dict.update({ - "data": data, - "count": count, - }) + field_dict.update( + { + "data": data, + "count": count, + } + ) return field_dict - - @classmethod def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: from ..models.activity_log_public import ActivityLogPublic + d = dict(src_dict) data = [] _data = d.pop("data") - for data_item_data in (_data): + for data_item_data in _data: data_item = ActivityLogPublic.from_dict(data_item_data) - - data.append(data_item) - count = d.pop("count") activity_logs_public = cls( @@ -81,7 +63,6 @@ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: count=count, ) - activity_logs_public.additional_properties = d return activity_logs_public diff --git a/kindred-sdk/personal_crm_client/models/address_create.py b/kindred-sdk/personal_crm_client/models/address_create.py index 08741e90..99b4fee9 100644 --- a/kindred-sdk/personal_crm_client/models/address_create.py +++ b/kindred-sdk/personal_crm_client/models/address_create.py @@ -1,44 +1,35 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator +from typing import Any, TypeVar, cast +from uuid import UUID from attrs import define as _attrs_define from attrs import field as _attrs_field from ..types import UNSET, Unset -from ..types import UNSET, Unset -from typing import cast -from uuid import UUID - - - - - - T = TypeVar("T", bound="AddressCreate") - @_attrs_define class AddressCreate: - """ - Attributes: - contact_id (UUID): - label (str | Unset): Label like "home", "work", "other". Default: 'home'. - street (None | str | Unset): Street line 1. - extended (None | str | Unset): Apartment, suite, floor, etc. - city (None | str | Unset): City. - region (None | str | Unset): State, province, or region. - postal_code (None | str | Unset): ZIP or postal code. - country (None | str | Unset): Country. - latitude (float | None | Unset): Geocoded latitude; used for map visualization. - longitude (float | None | Unset): Geocoded longitude; used for map visualization. - """ + """ + Attributes: + contact_id (UUID): + label (str | Unset): Label like "home", "work", "other". Default: 'home'. + street (None | str | Unset): Street line 1. + extended (None | str | Unset): Apartment, suite, floor, etc. + city (None | str | Unset): City. + region (None | str | Unset): State, province, or region. + postal_code (None | str | Unset): ZIP or postal code. + country (None | str | Unset): Country. + latitude (float | None | Unset): Geocoded latitude; used for map visualization. + longitude (float | None | Unset): Geocoded longitude; used for map visualization. + """ contact_id: UUID - label: str | Unset = 'home' + label: str | Unset = "home" street: None | str | Unset = UNSET extended: None | str | Unset = UNSET city: None | str | Unset = UNSET @@ -49,10 +40,6 @@ class AddressCreate: longitude: float | None | Unset = UNSET additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) - - - - def to_dict(self) -> dict[str, Any]: contact_id = str(self.contact_id) @@ -106,12 +93,13 @@ def to_dict(self) -> dict[str, Any]: else: longitude = self.longitude - field_dict: dict[str, Any] = {} field_dict.update(self.additional_properties) - field_dict.update({ - "contact_id": contact_id, - }) + field_dict.update( + { + "contact_id": contact_id, + } + ) if label is not UNSET: field_dict["label"] = label if street is not UNSET: @@ -133,16 +121,11 @@ def to_dict(self) -> dict[str, Any]: return field_dict - - @classmethod def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: d = dict(src_dict) contact_id = UUID(d.pop("contact_id")) - - - label = d.pop("label", UNSET) def _parse_street(data: object) -> None | str | Unset: @@ -154,7 +137,6 @@ def _parse_street(data: object) -> None | str | Unset: street = _parse_street(d.pop("street", UNSET)) - def _parse_extended(data: object) -> None | str | Unset: if data is None: return data @@ -164,7 +146,6 @@ def _parse_extended(data: object) -> None | str | Unset: extended = _parse_extended(d.pop("extended", UNSET)) - def _parse_city(data: object) -> None | str | Unset: if data is None: return data @@ -174,7 +155,6 @@ def _parse_city(data: object) -> None | str | Unset: city = _parse_city(d.pop("city", UNSET)) - def _parse_region(data: object) -> None | str | Unset: if data is None: return data @@ -184,7 +164,6 @@ def _parse_region(data: object) -> None | str | Unset: region = _parse_region(d.pop("region", UNSET)) - def _parse_postal_code(data: object) -> None | str | Unset: if data is None: return data @@ -194,7 +173,6 @@ def _parse_postal_code(data: object) -> None | str | Unset: postal_code = _parse_postal_code(d.pop("postal_code", UNSET)) - def _parse_country(data: object) -> None | str | Unset: if data is None: return data @@ -204,7 +182,6 @@ def _parse_country(data: object) -> None | str | Unset: country = _parse_country(d.pop("country", UNSET)) - def _parse_latitude(data: object) -> float | None | Unset: if data is None: return data @@ -214,7 +191,6 @@ def _parse_latitude(data: object) -> float | None | Unset: latitude = _parse_latitude(d.pop("latitude", UNSET)) - def _parse_longitude(data: object) -> float | None | Unset: if data is None: return data @@ -224,7 +200,6 @@ def _parse_longitude(data: object) -> float | None | Unset: longitude = _parse_longitude(d.pop("longitude", UNSET)) - address_create = cls( contact_id=contact_id, label=label, @@ -238,7 +213,6 @@ def _parse_longitude(data: object) -> float | None | Unset: longitude=longitude, ) - address_create.additional_properties = d return address_create diff --git a/kindred-sdk/personal_crm_client/models/address_public.py b/kindred-sdk/personal_crm_client/models/address_public.py index 6864690d..5e9208b7 100644 --- a/kindred-sdk/personal_crm_client/models/address_public.py +++ b/kindred-sdk/personal_crm_client/models/address_public.py @@ -1,46 +1,37 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator +from typing import Any, TypeVar, cast +from uuid import UUID from attrs import define as _attrs_define from attrs import field as _attrs_field from ..types import UNSET, Unset -from ..types import UNSET, Unset -from typing import cast -from uuid import UUID - - - - - - T = TypeVar("T", bound="AddressPublic") - @_attrs_define class AddressPublic: - """ - Attributes: - id (UUID): - contact_id (UUID): - label (str | Unset): Label like "home", "work", "other". Default: 'home'. - street (None | str | Unset): Street line 1. - extended (None | str | Unset): Apartment, suite, floor, etc. - city (None | str | Unset): City. - region (None | str | Unset): State, province, or region. - postal_code (None | str | Unset): ZIP or postal code. - country (None | str | Unset): Country. - latitude (float | None | Unset): Geocoded latitude; used for map visualization. - longitude (float | None | Unset): Geocoded longitude; used for map visualization. - """ + """ + Attributes: + id (UUID): + contact_id (UUID): + label (str | Unset): Label like "home", "work", "other". Default: 'home'. + street (None | str | Unset): Street line 1. + extended (None | str | Unset): Apartment, suite, floor, etc. + city (None | str | Unset): City. + region (None | str | Unset): State, province, or region. + postal_code (None | str | Unset): ZIP or postal code. + country (None | str | Unset): Country. + latitude (float | None | Unset): Geocoded latitude; used for map visualization. + longitude (float | None | Unset): Geocoded longitude; used for map visualization. + """ id: UUID contact_id: UUID - label: str | Unset = 'home' + label: str | Unset = "home" street: None | str | Unset = UNSET extended: None | str | Unset = UNSET city: None | str | Unset = UNSET @@ -51,10 +42,6 @@ class AddressPublic: longitude: float | None | Unset = UNSET additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) - - - - def to_dict(self) -> dict[str, Any]: id = str(self.id) @@ -110,13 +97,14 @@ def to_dict(self) -> dict[str, Any]: else: longitude = self.longitude - field_dict: dict[str, Any] = {} field_dict.update(self.additional_properties) - field_dict.update({ - "id": id, - "contact_id": contact_id, - }) + field_dict.update( + { + "id": id, + "contact_id": contact_id, + } + ) if label is not UNSET: field_dict["label"] = label if street is not UNSET: @@ -138,21 +126,13 @@ def to_dict(self) -> dict[str, Any]: return field_dict - - @classmethod def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: d = dict(src_dict) id = UUID(d.pop("id")) - - - contact_id = UUID(d.pop("contact_id")) - - - label = d.pop("label", UNSET) def _parse_street(data: object) -> None | str | Unset: @@ -164,7 +144,6 @@ def _parse_street(data: object) -> None | str | Unset: street = _parse_street(d.pop("street", UNSET)) - def _parse_extended(data: object) -> None | str | Unset: if data is None: return data @@ -174,7 +153,6 @@ def _parse_extended(data: object) -> None | str | Unset: extended = _parse_extended(d.pop("extended", UNSET)) - def _parse_city(data: object) -> None | str | Unset: if data is None: return data @@ -184,7 +162,6 @@ def _parse_city(data: object) -> None | str | Unset: city = _parse_city(d.pop("city", UNSET)) - def _parse_region(data: object) -> None | str | Unset: if data is None: return data @@ -194,7 +171,6 @@ def _parse_region(data: object) -> None | str | Unset: region = _parse_region(d.pop("region", UNSET)) - def _parse_postal_code(data: object) -> None | str | Unset: if data is None: return data @@ -204,7 +180,6 @@ def _parse_postal_code(data: object) -> None | str | Unset: postal_code = _parse_postal_code(d.pop("postal_code", UNSET)) - def _parse_country(data: object) -> None | str | Unset: if data is None: return data @@ -214,7 +189,6 @@ def _parse_country(data: object) -> None | str | Unset: country = _parse_country(d.pop("country", UNSET)) - def _parse_latitude(data: object) -> float | None | Unset: if data is None: return data @@ -224,7 +198,6 @@ def _parse_latitude(data: object) -> float | None | Unset: latitude = _parse_latitude(d.pop("latitude", UNSET)) - def _parse_longitude(data: object) -> float | None | Unset: if data is None: return data @@ -234,7 +207,6 @@ def _parse_longitude(data: object) -> float | None | Unset: longitude = _parse_longitude(d.pop("longitude", UNSET)) - address_public = cls( id=id, contact_id=contact_id, @@ -249,7 +221,6 @@ def _parse_longitude(data: object) -> float | None | Unset: longitude=longitude, ) - address_public.additional_properties = d return address_public diff --git a/kindred-sdk/personal_crm_client/models/address_update.py b/kindred-sdk/personal_crm_client/models/address_update.py index 773ed13f..a43ff0cb 100644 --- a/kindred-sdk/personal_crm_client/models/address_update.py +++ b/kindred-sdk/personal_crm_client/models/address_update.py @@ -1,39 +1,30 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator +from typing import Any, TypeVar, cast from attrs import define as _attrs_define from attrs import field as _attrs_field from ..types import UNSET, Unset -from ..types import UNSET, Unset -from typing import cast - - - - - - T = TypeVar("T", bound="AddressUpdate") - @_attrs_define class AddressUpdate: - """ - Attributes: - label (None | str | Unset): - street (None | str | Unset): - extended (None | str | Unset): - city (None | str | Unset): - region (None | str | Unset): - postal_code (None | str | Unset): - country (None | str | Unset): - latitude (float | None | Unset): - longitude (float | None | Unset): - """ + """ + Attributes: + label (None | str | Unset): + street (None | str | Unset): + extended (None | str | Unset): + city (None | str | Unset): + region (None | str | Unset): + postal_code (None | str | Unset): + country (None | str | Unset): + latitude (float | None | Unset): + longitude (float | None | Unset): + """ label: None | str | Unset = UNSET street: None | str | Unset = UNSET @@ -46,10 +37,6 @@ class AddressUpdate: longitude: float | None | Unset = UNSET additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) - - - - def to_dict(self) -> dict[str, Any]: label: None | str | Unset if isinstance(self.label, Unset): @@ -105,11 +92,9 @@ def to_dict(self) -> dict[str, Any]: else: longitude = self.longitude - field_dict: dict[str, Any] = {} field_dict.update(self.additional_properties) - field_dict.update({ - }) + field_dict.update({}) if label is not UNSET: field_dict["label"] = label if street is not UNSET: @@ -131,11 +116,10 @@ def to_dict(self) -> dict[str, Any]: return field_dict - - @classmethod def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: d = dict(src_dict) + def _parse_label(data: object) -> None | str | Unset: if data is None: return data @@ -145,7 +129,6 @@ def _parse_label(data: object) -> None | str | Unset: label = _parse_label(d.pop("label", UNSET)) - def _parse_street(data: object) -> None | str | Unset: if data is None: return data @@ -155,7 +138,6 @@ def _parse_street(data: object) -> None | str | Unset: street = _parse_street(d.pop("street", UNSET)) - def _parse_extended(data: object) -> None | str | Unset: if data is None: return data @@ -165,7 +147,6 @@ def _parse_extended(data: object) -> None | str | Unset: extended = _parse_extended(d.pop("extended", UNSET)) - def _parse_city(data: object) -> None | str | Unset: if data is None: return data @@ -175,7 +156,6 @@ def _parse_city(data: object) -> None | str | Unset: city = _parse_city(d.pop("city", UNSET)) - def _parse_region(data: object) -> None | str | Unset: if data is None: return data @@ -185,7 +165,6 @@ def _parse_region(data: object) -> None | str | Unset: region = _parse_region(d.pop("region", UNSET)) - def _parse_postal_code(data: object) -> None | str | Unset: if data is None: return data @@ -195,7 +174,6 @@ def _parse_postal_code(data: object) -> None | str | Unset: postal_code = _parse_postal_code(d.pop("postal_code", UNSET)) - def _parse_country(data: object) -> None | str | Unset: if data is None: return data @@ -205,7 +183,6 @@ def _parse_country(data: object) -> None | str | Unset: country = _parse_country(d.pop("country", UNSET)) - def _parse_latitude(data: object) -> float | None | Unset: if data is None: return data @@ -215,7 +192,6 @@ def _parse_latitude(data: object) -> float | None | Unset: latitude = _parse_latitude(d.pop("latitude", UNSET)) - def _parse_longitude(data: object) -> float | None | Unset: if data is None: return data @@ -225,7 +201,6 @@ def _parse_longitude(data: object) -> float | None | Unset: longitude = _parse_longitude(d.pop("longitude", UNSET)) - address_update = cls( label=label, street=street, @@ -238,7 +213,6 @@ def _parse_longitude(data: object) -> float | None | Unset: longitude=longitude, ) - address_update.additional_properties = d return address_update diff --git a/kindred-sdk/personal_crm_client/models/body_import_export_import_vcard.py b/kindred-sdk/personal_crm_client/models/body_import_export_import_vcard.py index 8dd39e67..ad11fbcc 100644 --- a/kindred-sdk/personal_crm_client/models/body_import_export_import_vcard.py +++ b/kindred-sdk/personal_crm_client/models/body_import_export_import_vcard.py @@ -1,86 +1,60 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator +from io import BytesIO +from typing import Any, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -import json -from .. import types - -from ..types import UNSET, Unset - -from ..types import File, FileTypes -from io import BytesIO - - - - +from .. import types +from ..types import File T = TypeVar("T", bound="BodyImportExportImportVcard") - @_attrs_define class BodyImportExportImportVcard: - """ - Attributes: - file (File): - """ + """ + Attributes: + file (File): + """ file: File additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) - - - - def to_dict(self) -> dict[str, Any]: file = self.file.to_tuple() - - field_dict: dict[str, Any] = {} field_dict.update(self.additional_properties) - field_dict.update({ - "file": file, - }) + field_dict.update( + { + "file": file, + } + ) return field_dict - def to_multipart(self) -> types.RequestFiles: files: types.RequestFiles = [] files.append(("file", self.file.to_tuple())) - - - for prop_name, prop in self.additional_properties.items(): files.append((prop_name, (None, str(prop).encode(), "text/plain"))) - - return files - @classmethod def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: d = dict(src_dict) - file = File( - payload = BytesIO(d.pop("file")) - ) - - - + file = File(payload=BytesIO(d.pop("file"))) body_import_export_import_vcard = cls( file=file, ) - body_import_export_import_vcard.additional_properties = d return body_import_export_import_vcard diff --git a/kindred-sdk/personal_crm_client/models/body_login_login_access_token.py b/kindred-sdk/personal_crm_client/models/body_login_login_access_token.py index 675fb6a0..339460a8 100644 --- a/kindred-sdk/personal_crm_client/models/body_login_login_access_token.py +++ b/kindred-sdk/personal_crm_client/models/body_login_login_access_token.py @@ -1,49 +1,36 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator +from typing import Any, TypeVar, cast from attrs import define as _attrs_define from attrs import field as _attrs_field from ..types import UNSET, Unset -from ..types import UNSET, Unset -from typing import cast - - - - - - T = TypeVar("T", bound="BodyLoginLoginAccessToken") - @_attrs_define class BodyLoginLoginAccessToken: - """ - Attributes: - username (str): - password (str): - grant_type (None | str | Unset): - scope (str | Unset): Default: ''. - client_id (None | str | Unset): - client_secret (None | str | Unset): - """ + """ + Attributes: + username (str): + password (str): + grant_type (None | str | Unset): + scope (str | Unset): Default: ''. + client_id (None | str | Unset): + client_secret (None | str | Unset): + """ username: str password: str grant_type: None | str | Unset = UNSET - scope: str | Unset = '' + scope: str | Unset = "" client_id: None | str | Unset = UNSET client_secret: None | str | Unset = UNSET additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) - - - - def to_dict(self) -> dict[str, Any]: username = self.username @@ -69,13 +56,14 @@ def to_dict(self) -> dict[str, Any]: else: client_secret = self.client_secret - field_dict: dict[str, Any] = {} field_dict.update(self.additional_properties) - field_dict.update({ - "username": username, - "password": password, - }) + field_dict.update( + { + "username": username, + "password": password, + } + ) if grant_type is not UNSET: field_dict["grant_type"] = grant_type if scope is not UNSET: @@ -87,8 +75,6 @@ def to_dict(self) -> dict[str, Any]: return field_dict - - @classmethod def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: d = dict(src_dict) @@ -105,7 +91,6 @@ def _parse_grant_type(data: object) -> None | str | Unset: grant_type = _parse_grant_type(d.pop("grant_type", UNSET)) - scope = d.pop("scope", UNSET) def _parse_client_id(data: object) -> None | str | Unset: @@ -117,7 +102,6 @@ def _parse_client_id(data: object) -> None | str | Unset: client_id = _parse_client_id(d.pop("client_id", UNSET)) - def _parse_client_secret(data: object) -> None | str | Unset: if data is None: return data @@ -127,7 +111,6 @@ def _parse_client_secret(data: object) -> None | str | Unset: client_secret = _parse_client_secret(d.pop("client_secret", UNSET)) - body_login_login_access_token = cls( username=username, password=password, @@ -137,7 +120,6 @@ def _parse_client_secret(data: object) -> None | str | Unset: client_secret=client_secret, ) - body_login_login_access_token.additional_properties = d return body_login_login_access_token diff --git a/kindred-sdk/personal_crm_client/models/calendar_entry.py b/kindred-sdk/personal_crm_client/models/calendar_entry.py index 789e7ac4..530c0b32 100644 --- a/kindred-sdk/personal_crm_client/models/calendar_entry.py +++ b/kindred-sdk/personal_crm_client/models/calendar_entry.py @@ -1,34 +1,24 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator +from typing import Any, TypeVar, cast +from uuid import UUID from attrs import define as _attrs_define from attrs import field as _attrs_field -from ..types import UNSET, Unset - -from typing import cast -from uuid import UUID - - - - - - T = TypeVar("T", bound="CalendarEntry") - @_attrs_define class CalendarEntry: - """ - Attributes: - contact_id (UUID): - name (str): - type_ (str): - age (int | None): - """ + """ + Attributes: + contact_id (UUID): + name (str): + type_ (str): + age (int | None): + """ contact_id: UUID name: str @@ -36,10 +26,6 @@ class CalendarEntry: age: int | None additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) - - - - def to_dict(self) -> dict[str, Any]: contact_id = str(self.contact_id) @@ -50,28 +36,24 @@ def to_dict(self) -> dict[str, Any]: age: int | None age = self.age - field_dict: dict[str, Any] = {} field_dict.update(self.additional_properties) - field_dict.update({ - "contact_id": contact_id, - "name": name, - "type": type_, - "age": age, - }) + field_dict.update( + { + "contact_id": contact_id, + "name": name, + "type": type_, + "age": age, + } + ) return field_dict - - @classmethod def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: d = dict(src_dict) contact_id = UUID(d.pop("contact_id")) - - - name = d.pop("name") type_ = d.pop("type") @@ -83,7 +65,6 @@ def _parse_age(data: object) -> int | None: age = _parse_age(d.pop("age")) - calendar_entry = cls( contact_id=contact_id, name=name, @@ -91,7 +72,6 @@ def _parse_age(data: object) -> int | None: age=age, ) - calendar_entry.additional_properties = d return calendar_entry diff --git a/kindred-sdk/personal_crm_client/models/calendar_month_response.py b/kindred-sdk/personal_crm_client/models/calendar_month_response.py index 2b2ad6a7..327ad37a 100644 --- a/kindred-sdk/personal_crm_client/models/calendar_month_response.py +++ b/kindred-sdk/personal_crm_client/models/calendar_month_response.py @@ -1,77 +1,60 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator +from typing import TYPE_CHECKING, Any, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from ..types import UNSET, Unset - -from typing import cast - if TYPE_CHECKING: - from ..models.calendar_month_response_days import CalendarMonthResponseDays - - - + from ..models.calendar_month_response_days import CalendarMonthResponseDays T = TypeVar("T", bound="CalendarMonthResponse") - @_attrs_define class CalendarMonthResponse: - """ - Attributes: - month (str): - days (CalendarMonthResponseDays): - """ + """ + Attributes: + month (str): + days (CalendarMonthResponseDays): + """ month: str days: CalendarMonthResponseDays additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) - - - - def to_dict(self) -> dict[str, Any]: - from ..models.calendar_month_response_days import CalendarMonthResponseDays month = self.month days = self.days.to_dict() - field_dict: dict[str, Any] = {} field_dict.update(self.additional_properties) - field_dict.update({ - "month": month, - "days": days, - }) + field_dict.update( + { + "month": month, + "days": days, + } + ) return field_dict - - @classmethod def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: from ..models.calendar_month_response_days import CalendarMonthResponseDays + d = dict(src_dict) month = d.pop("month") days = CalendarMonthResponseDays.from_dict(d.pop("days")) - - - calendar_month_response = cls( month=month, days=days, ) - calendar_month_response.additional_properties = d return calendar_month_response diff --git a/kindred-sdk/personal_crm_client/models/calendar_month_response_days.py b/kindred-sdk/personal_crm_client/models/calendar_month_response_days.py index fa7b6aa9..2b783390 100644 --- a/kindred-sdk/personal_crm_client/models/calendar_month_response_days.py +++ b/kindred-sdk/personal_crm_client/models/calendar_month_response_days.py @@ -1,40 +1,25 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator +from typing import TYPE_CHECKING, Any, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from ..types import UNSET, Unset - -from typing import cast - if TYPE_CHECKING: - from ..models.calendar_entry import CalendarEntry - - - + from ..models.calendar_entry import CalendarEntry T = TypeVar("T", bound="CalendarMonthResponseDays") - @_attrs_define class CalendarMonthResponseDays: - """ - """ + """ """ additional_properties: dict[str, list[CalendarEntry]] = _attrs_field(init=False, factory=dict) - - - - def to_dict(self) -> dict[str, Any]: - from ..models.calendar_entry import CalendarEntry - field_dict: dict[str, Any] = {} for prop_name, prop in self.additional_properties.items(): field_dict[prop_name] = [] @@ -42,30 +27,22 @@ def to_dict(self) -> dict[str, Any]: additional_property_item = additional_property_item_data.to_dict() field_dict[prop_name].append(additional_property_item) - - - return field_dict - - @classmethod def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: from ..models.calendar_entry import CalendarEntry - d = dict(src_dict) - calendar_month_response_days = cls( - ) + d = dict(src_dict) + calendar_month_response_days = cls() additional_properties = {} for prop_name, prop_dict in d.items(): additional_property = [] _additional_property = prop_dict - for additional_property_item_data in (_additional_property): + for additional_property_item_data in _additional_property: additional_property_item = CalendarEntry.from_dict(additional_property_item_data) - - additional_property.append(additional_property_item) additional_properties[prop_name] = additional_property diff --git a/kindred-sdk/personal_crm_client/models/contact_create.py b/kindred-sdk/personal_crm_client/models/contact_create.py index 143aa8d3..a12a9520 100644 --- a/kindred-sdk/personal_crm_client/models/contact_create.py +++ b/kindred-sdk/personal_crm_client/models/contact_create.py @@ -1,52 +1,43 @@ from __future__ import annotations +import datetime from collections.abc import Mapping -from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator +from typing import Any, TypeVar, cast +from uuid import UUID from attrs import define as _attrs_define from attrs import field as _attrs_field - -from ..types import UNSET, Unset - -from ..types import UNSET, Unset from dateutil.parser import isoparse -from typing import cast -from uuid import UUID -import datetime - - - - +from ..types import UNSET, Unset T = TypeVar("T", bound="ContactCreate") - @_attrs_define class ContactCreate: - """ - Attributes: - first_name (str): Given name; required. - last_name (None | str | Unset): Family name. - middle_name (None | str | Unset): Middle name or initial. - prefix (None | str | Unset): Honorific like Dr., Mr., Ms. - suffix (None | str | Unset): Suffix like Jr., PhD. - nickname (None | str | Unset): Preferred or informal name. - company (None | str | Unset): Organization name. - department (None | str | Unset): Department within the company. - title (None | str | Unset): Job title. - birthday (datetime.date | None | Unset): Date of birth; used for milestone and birthday reminders. - how_we_met (None | str | Unset): Short story of how the introduction happened. - is_favorite (bool | Unset): Pinned to the top of contact lists. Default: False. - is_archived (bool | Unset): Soft-deleted; excluded from default lists. Default: False. - is_deceased (bool | Unset): Marks the contact as deceased. Default: False. - deceased_at (datetime.date | None | Unset): Date the contact passed away. - contact_frequency_days (int | None | Unset): Target days between interactions; drives losing-touch cadence. - stage (None | str | Unset): Kanban stage like Active, Dormant, Lost. - tag_ids (list[UUID] | None | Unset): - group_ids (list[UUID] | None | Unset): - """ + """ + Attributes: + first_name (str): Given name; required. + last_name (None | str | Unset): Family name. + middle_name (None | str | Unset): Middle name or initial. + prefix (None | str | Unset): Honorific like Dr., Mr., Ms. + suffix (None | str | Unset): Suffix like Jr., PhD. + nickname (None | str | Unset): Preferred or informal name. + company (None | str | Unset): Organization name. + department (None | str | Unset): Department within the company. + title (None | str | Unset): Job title. + birthday (datetime.date | None | Unset): Date of birth; used for milestone and birthday reminders. + how_we_met (None | str | Unset): Short story of how the introduction happened. + is_favorite (bool | Unset): Pinned to the top of contact lists. Default: False. + is_archived (bool | Unset): Soft-deleted; excluded from default lists. Default: False. + is_deceased (bool | Unset): Marks the contact as deceased. Default: False. + deceased_at (datetime.date | None | Unset): Date the contact passed away. + contact_frequency_days (int | None | Unset): Target days between interactions; drives losing-touch cadence. + stage (None | str | Unset): Kanban stage like Active, Dormant, Lost. + tag_ids (list[UUID] | None | Unset): + group_ids (list[UUID] | None | Unset): + """ first_name: str last_name: None | str | Unset = UNSET @@ -69,10 +60,6 @@ class ContactCreate: group_ids: list[UUID] | None | Unset = UNSET additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) - - - - def to_dict(self) -> dict[str, Any]: first_name = self.first_name @@ -173,7 +160,6 @@ def to_dict(self) -> dict[str, Any]: tag_ids_type_0_item = str(tag_ids_type_0_item_data) tag_ids.append(tag_ids_type_0_item) - else: tag_ids = self.tag_ids @@ -186,16 +172,16 @@ def to_dict(self) -> dict[str, Any]: group_ids_type_0_item = str(group_ids_type_0_item_data) group_ids.append(group_ids_type_0_item) - else: group_ids = self.group_ids - field_dict: dict[str, Any] = {} field_dict.update(self.additional_properties) - field_dict.update({ - "first_name": first_name, - }) + field_dict.update( + { + "first_name": first_name, + } + ) if last_name is not UNSET: field_dict["last_name"] = last_name if middle_name is not UNSET: @@ -235,8 +221,6 @@ def to_dict(self) -> dict[str, Any]: return field_dict - - @classmethod def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: d = dict(src_dict) @@ -251,7 +235,6 @@ def _parse_last_name(data: object) -> None | str | Unset: last_name = _parse_last_name(d.pop("last_name", UNSET)) - def _parse_middle_name(data: object) -> None | str | Unset: if data is None: return data @@ -261,7 +244,6 @@ def _parse_middle_name(data: object) -> None | str | Unset: middle_name = _parse_middle_name(d.pop("middle_name", UNSET)) - def _parse_prefix(data: object) -> None | str | Unset: if data is None: return data @@ -271,7 +253,6 @@ def _parse_prefix(data: object) -> None | str | Unset: prefix = _parse_prefix(d.pop("prefix", UNSET)) - def _parse_suffix(data: object) -> None | str | Unset: if data is None: return data @@ -281,7 +262,6 @@ def _parse_suffix(data: object) -> None | str | Unset: suffix = _parse_suffix(d.pop("suffix", UNSET)) - def _parse_nickname(data: object) -> None | str | Unset: if data is None: return data @@ -291,7 +271,6 @@ def _parse_nickname(data: object) -> None | str | Unset: nickname = _parse_nickname(d.pop("nickname", UNSET)) - def _parse_company(data: object) -> None | str | Unset: if data is None: return data @@ -301,7 +280,6 @@ def _parse_company(data: object) -> None | str | Unset: company = _parse_company(d.pop("company", UNSET)) - def _parse_department(data: object) -> None | str | Unset: if data is None: return data @@ -311,7 +289,6 @@ def _parse_department(data: object) -> None | str | Unset: department = _parse_department(d.pop("department", UNSET)) - def _parse_title(data: object) -> None | str | Unset: if data is None: return data @@ -321,7 +298,6 @@ def _parse_title(data: object) -> None | str | Unset: title = _parse_title(d.pop("title", UNSET)) - def _parse_birthday(data: object) -> datetime.date | None | Unset: if data is None: return data @@ -332,8 +308,6 @@ def _parse_birthday(data: object) -> datetime.date | None | Unset: raise TypeError() birthday_type_0 = isoparse(data).date() - - return birthday_type_0 except (TypeError, ValueError, AttributeError, KeyError): pass @@ -341,7 +315,6 @@ def _parse_birthday(data: object) -> datetime.date | None | Unset: birthday = _parse_birthday(d.pop("birthday", UNSET)) - def _parse_how_we_met(data: object) -> None | str | Unset: if data is None: return data @@ -351,7 +324,6 @@ def _parse_how_we_met(data: object) -> None | str | Unset: how_we_met = _parse_how_we_met(d.pop("how_we_met", UNSET)) - is_favorite = d.pop("is_favorite", UNSET) is_archived = d.pop("is_archived", UNSET) @@ -368,8 +340,6 @@ def _parse_deceased_at(data: object) -> datetime.date | None | Unset: raise TypeError() deceased_at_type_0 = isoparse(data).date() - - return deceased_at_type_0 except (TypeError, ValueError, AttributeError, KeyError): pass @@ -377,7 +347,6 @@ def _parse_deceased_at(data: object) -> datetime.date | None | Unset: deceased_at = _parse_deceased_at(d.pop("deceased_at", UNSET)) - def _parse_contact_frequency_days(data: object) -> int | None | Unset: if data is None: return data @@ -387,7 +356,6 @@ def _parse_contact_frequency_days(data: object) -> int | None | Unset: contact_frequency_days = _parse_contact_frequency_days(d.pop("contact_frequency_days", UNSET)) - def _parse_stage(data: object) -> None | str | Unset: if data is None: return data @@ -397,7 +365,6 @@ def _parse_stage(data: object) -> None | str | Unset: stage = _parse_stage(d.pop("stage", UNSET)) - def _parse_tag_ids(data: object) -> list[UUID] | None | Unset: if data is None: return data @@ -408,11 +375,9 @@ def _parse_tag_ids(data: object) -> list[UUID] | None | Unset: raise TypeError() tag_ids_type_0 = [] _tag_ids_type_0 = data - for tag_ids_type_0_item_data in (_tag_ids_type_0): + for tag_ids_type_0_item_data in _tag_ids_type_0: tag_ids_type_0_item = UUID(tag_ids_type_0_item_data) - - tag_ids_type_0.append(tag_ids_type_0_item) return tag_ids_type_0 @@ -422,7 +387,6 @@ def _parse_tag_ids(data: object) -> list[UUID] | None | Unset: tag_ids = _parse_tag_ids(d.pop("tag_ids", UNSET)) - def _parse_group_ids(data: object) -> list[UUID] | None | Unset: if data is None: return data @@ -433,11 +397,9 @@ def _parse_group_ids(data: object) -> list[UUID] | None | Unset: raise TypeError() group_ids_type_0 = [] _group_ids_type_0 = data - for group_ids_type_0_item_data in (_group_ids_type_0): + for group_ids_type_0_item_data in _group_ids_type_0: group_ids_type_0_item = UUID(group_ids_type_0_item_data) - - group_ids_type_0.append(group_ids_type_0_item) return group_ids_type_0 @@ -447,7 +409,6 @@ def _parse_group_ids(data: object) -> list[UUID] | None | Unset: group_ids = _parse_group_ids(d.pop("group_ids", UNSET)) - contact_create = cls( first_name=first_name, last_name=last_name, @@ -470,7 +431,6 @@ def _parse_group_ids(data: object) -> list[UUID] | None | Unset: group_ids=group_ids, ) - contact_create.additional_properties = d return contact_create diff --git a/kindred-sdk/personal_crm_client/models/contact_field_create.py b/kindred-sdk/personal_crm_client/models/contact_field_create.py index ce0139a4..1a7f8c3b 100644 --- a/kindred-sdk/personal_crm_client/models/contact_field_create.py +++ b/kindred-sdk/personal_crm_client/models/contact_field_create.py @@ -1,37 +1,29 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator +from typing import Any, TypeVar +from uuid import UUID from attrs import define as _attrs_define from attrs import field as _attrs_field -from ..types import UNSET, Unset - from ..models.contact_field_type import ContactFieldType from ..types import UNSET, Unset -from uuid import UUID - - - - - T = TypeVar("T", bound="ContactFieldCreate") - @_attrs_define class ContactFieldCreate: - """ - Attributes: - field_type (ContactFieldType): - label (str): Label like "home", "work", "cell", "twitter". - value (str): The actual email address, phone number, etc. - contact_id (UUID): - is_primary (bool | Unset): Marks the primary entry for this field_type on the contact. Default: False. - sort_order (int | Unset): Display order within the same field_type. Default: 0. - """ + """ + Attributes: + field_type (ContactFieldType): + label (str): Label like "home", "work", "cell", "twitter". + value (str): The actual email address, phone number, etc. + contact_id (UUID): + is_primary (bool | Unset): Marks the primary entry for this field_type on the contact. Default: False. + sort_order (int | Unset): Display order within the same field_type. Default: 0. + """ field_type: ContactFieldType label: str @@ -41,10 +33,6 @@ class ContactFieldCreate: sort_order: int | Unset = 0 additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) - - - - def to_dict(self) -> dict[str, Any]: field_type = self.field_type.value @@ -58,15 +46,16 @@ def to_dict(self) -> dict[str, Any]: sort_order = self.sort_order - field_dict: dict[str, Any] = {} field_dict.update(self.additional_properties) - field_dict.update({ - "field_type": field_type, - "label": label, - "value": value, - "contact_id": contact_id, - }) + field_dict.update( + { + "field_type": field_type, + "label": label, + "value": value, + "contact_id": contact_id, + } + ) if is_primary is not UNSET: field_dict["is_primary"] = is_primary if sort_order is not UNSET: @@ -74,25 +63,17 @@ def to_dict(self) -> dict[str, Any]: return field_dict - - @classmethod def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: d = dict(src_dict) field_type = ContactFieldType(d.pop("field_type")) - - - label = d.pop("label") value = d.pop("value") contact_id = UUID(d.pop("contact_id")) - - - is_primary = d.pop("is_primary", UNSET) sort_order = d.pop("sort_order", UNSET) @@ -106,7 +87,6 @@ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: sort_order=sort_order, ) - contact_field_create.additional_properties = d return contact_field_create diff --git a/kindred-sdk/personal_crm_client/models/contact_field_public.py b/kindred-sdk/personal_crm_client/models/contact_field_public.py index 64e23d15..cd404bfc 100644 --- a/kindred-sdk/personal_crm_client/models/contact_field_public.py +++ b/kindred-sdk/personal_crm_client/models/contact_field_public.py @@ -1,38 +1,30 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator +from typing import Any, TypeVar +from uuid import UUID from attrs import define as _attrs_define from attrs import field as _attrs_field -from ..types import UNSET, Unset - from ..models.contact_field_type import ContactFieldType from ..types import UNSET, Unset -from uuid import UUID - - - - - T = TypeVar("T", bound="ContactFieldPublic") - @_attrs_define class ContactFieldPublic: - """ - Attributes: - field_type (ContactFieldType): - label (str): Label like "home", "work", "cell", "twitter". - value (str): The actual email address, phone number, etc. - id (UUID): - contact_id (UUID): - is_primary (bool | Unset): Marks the primary entry for this field_type on the contact. Default: False. - sort_order (int | Unset): Display order within the same field_type. Default: 0. - """ + """ + Attributes: + field_type (ContactFieldType): + label (str): Label like "home", "work", "cell", "twitter". + value (str): The actual email address, phone number, etc. + id (UUID): + contact_id (UUID): + is_primary (bool | Unset): Marks the primary entry for this field_type on the contact. Default: False. + sort_order (int | Unset): Display order within the same field_type. Default: 0. + """ field_type: ContactFieldType label: str @@ -43,10 +35,6 @@ class ContactFieldPublic: sort_order: int | Unset = 0 additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) - - - - def to_dict(self) -> dict[str, Any]: field_type = self.field_type.value @@ -62,16 +50,17 @@ def to_dict(self) -> dict[str, Any]: sort_order = self.sort_order - field_dict: dict[str, Any] = {} field_dict.update(self.additional_properties) - field_dict.update({ - "field_type": field_type, - "label": label, - "value": value, - "id": id, - "contact_id": contact_id, - }) + field_dict.update( + { + "field_type": field_type, + "label": label, + "value": value, + "id": id, + "contact_id": contact_id, + } + ) if is_primary is not UNSET: field_dict["is_primary"] = is_primary if sort_order is not UNSET: @@ -79,30 +68,19 @@ def to_dict(self) -> dict[str, Any]: return field_dict - - @classmethod def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: d = dict(src_dict) field_type = ContactFieldType(d.pop("field_type")) - - - label = d.pop("label") value = d.pop("value") id = UUID(d.pop("id")) - - - contact_id = UUID(d.pop("contact_id")) - - - is_primary = d.pop("is_primary", UNSET) sort_order = d.pop("sort_order", UNSET) @@ -117,7 +95,6 @@ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: sort_order=sort_order, ) - contact_field_public.additional_properties = d return contact_field_public diff --git a/kindred-sdk/personal_crm_client/models/contact_field_type.py b/kindred-sdk/personal_crm_client/models/contact_field_type.py index feac025c..f6949b59 100644 --- a/kindred-sdk/personal_crm_client/models/contact_field_type.py +++ b/kindred-sdk/personal_crm_client/models/contact_field_type.py @@ -1,5 +1,6 @@ from enum import Enum + class ContactFieldType(str, Enum): EMAIL = "email" PHONE = "phone" diff --git a/kindred-sdk/personal_crm_client/models/contact_field_update.py b/kindred-sdk/personal_crm_client/models/contact_field_update.py index 36676708..ccd141e4 100644 --- a/kindred-sdk/personal_crm_client/models/contact_field_update.py +++ b/kindred-sdk/personal_crm_client/models/contact_field_update.py @@ -1,36 +1,27 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator +from typing import Any, TypeVar, cast from attrs import define as _attrs_define from attrs import field as _attrs_field -from ..types import UNSET, Unset - from ..models.contact_field_type import ContactFieldType from ..types import UNSET, Unset -from typing import cast - - - - - T = TypeVar("T", bound="ContactFieldUpdate") - @_attrs_define class ContactFieldUpdate: - """ - Attributes: - field_type (ContactFieldType | None | Unset): - label (None | str | Unset): - value (None | str | Unset): - is_primary (bool | None | Unset): - sort_order (int | None | Unset): - """ + """ + Attributes: + field_type (ContactFieldType | None | Unset): + label (None | str | Unset): + value (None | str | Unset): + is_primary (bool | None | Unset): + sort_order (int | None | Unset): + """ field_type: ContactFieldType | None | Unset = UNSET label: None | str | Unset = UNSET @@ -39,10 +30,6 @@ class ContactFieldUpdate: sort_order: int | None | Unset = UNSET additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) - - - - def to_dict(self) -> dict[str, Any]: field_type: None | str | Unset if isinstance(self.field_type, Unset): @@ -76,11 +63,9 @@ def to_dict(self) -> dict[str, Any]: else: sort_order = self.sort_order - field_dict: dict[str, Any] = {} field_dict.update(self.additional_properties) - field_dict.update({ - }) + field_dict.update({}) if field_type is not UNSET: field_dict["field_type"] = field_type if label is not UNSET: @@ -94,11 +79,10 @@ def to_dict(self) -> dict[str, Any]: return field_dict - - @classmethod def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: d = dict(src_dict) + def _parse_field_type(data: object) -> ContactFieldType | None | Unset: if data is None: return data @@ -109,8 +93,6 @@ def _parse_field_type(data: object) -> ContactFieldType | None | Unset: raise TypeError() field_type_type_0 = ContactFieldType(data) - - return field_type_type_0 except (TypeError, ValueError, AttributeError, KeyError): pass @@ -118,7 +100,6 @@ def _parse_field_type(data: object) -> ContactFieldType | None | Unset: field_type = _parse_field_type(d.pop("field_type", UNSET)) - def _parse_label(data: object) -> None | str | Unset: if data is None: return data @@ -128,7 +109,6 @@ def _parse_label(data: object) -> None | str | Unset: label = _parse_label(d.pop("label", UNSET)) - def _parse_value(data: object) -> None | str | Unset: if data is None: return data @@ -138,7 +118,6 @@ def _parse_value(data: object) -> None | str | Unset: value = _parse_value(d.pop("value", UNSET)) - def _parse_is_primary(data: object) -> bool | None | Unset: if data is None: return data @@ -148,7 +127,6 @@ def _parse_is_primary(data: object) -> bool | None | Unset: is_primary = _parse_is_primary(d.pop("is_primary", UNSET)) - def _parse_sort_order(data: object) -> int | None | Unset: if data is None: return data @@ -158,7 +136,6 @@ def _parse_sort_order(data: object) -> int | None | Unset: sort_order = _parse_sort_order(d.pop("sort_order", UNSET)) - contact_field_update = cls( field_type=field_type, label=label, @@ -167,7 +144,6 @@ def _parse_sort_order(data: object) -> int | None | Unset: sort_order=sort_order, ) - contact_field_update.additional_properties = d return contact_field_update diff --git a/kindred-sdk/personal_crm_client/models/contact_public.py b/kindred-sdk/personal_crm_client/models/contact_public.py index 12dc968a..93f2c85d 100644 --- a/kindred-sdk/personal_crm_client/models/contact_public.py +++ b/kindred-sdk/personal_crm_client/models/contact_public.py @@ -1,61 +1,54 @@ from __future__ import annotations +import datetime from collections.abc import Mapping -from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator +from typing import TYPE_CHECKING, Any, TypeVar, cast +from uuid import UUID from attrs import define as _attrs_define from attrs import field as _attrs_field +from dateutil.parser import isoparse from ..types import UNSET, Unset -from ..types import UNSET, Unset -from dateutil.parser import isoparse -from typing import cast -from uuid import UUID -import datetime - if TYPE_CHECKING: - from ..models.group_public import GroupPublic - from ..models.tag_public import TagPublic - - - + from ..models.group_public import GroupPublic + from ..models.tag_public import TagPublic T = TypeVar("T", bound="ContactPublic") - @_attrs_define class ContactPublic: - """ - Attributes: - first_name (str): Given name; required. - id (UUID): - avatar_url (None | str): - last_contacted_at (datetime.datetime | None): - created_at (datetime.datetime): - updated_at (datetime.datetime): - last_name (None | str | Unset): Family name. - middle_name (None | str | Unset): Middle name or initial. - prefix (None | str | Unset): Honorific like Dr., Mr., Ms. - suffix (None | str | Unset): Suffix like Jr., PhD. - nickname (None | str | Unset): Preferred or informal name. - company (None | str | Unset): Organization name. - department (None | str | Unset): Department within the company. - title (None | str | Unset): Job title. - birthday (datetime.date | None | Unset): Date of birth; used for milestone and birthday reminders. - how_we_met (None | str | Unset): Short story of how the introduction happened. - is_favorite (bool | Unset): Pinned to the top of contact lists. Default: False. - is_archived (bool | Unset): Soft-deleted; excluded from default lists. Default: False. - is_deceased (bool | Unset): Marks the contact as deceased. Default: False. - deceased_at (datetime.date | None | Unset): Date the contact passed away. - contact_frequency_days (int | None | Unset): Target days between interactions; drives losing-touch cadence. - stage (None | str | Unset): Kanban stage like Active, Dormant, Lost. - deleted_at (datetime.datetime | None | Unset): - tags (list[TagPublic] | Unset): - groups (list[GroupPublic] | Unset): - """ + """ + Attributes: + first_name (str): Given name; required. + id (UUID): + avatar_url (None | str): + last_contacted_at (datetime.datetime | None): + created_at (datetime.datetime): + updated_at (datetime.datetime): + last_name (None | str | Unset): Family name. + middle_name (None | str | Unset): Middle name or initial. + prefix (None | str | Unset): Honorific like Dr., Mr., Ms. + suffix (None | str | Unset): Suffix like Jr., PhD. + nickname (None | str | Unset): Preferred or informal name. + company (None | str | Unset): Organization name. + department (None | str | Unset): Department within the company. + title (None | str | Unset): Job title. + birthday (datetime.date | None | Unset): Date of birth; used for milestone and birthday reminders. + how_we_met (None | str | Unset): Short story of how the introduction happened. + is_favorite (bool | Unset): Pinned to the top of contact lists. Default: False. + is_archived (bool | Unset): Soft-deleted; excluded from default lists. Default: False. + is_deceased (bool | Unset): Marks the contact as deceased. Default: False. + deceased_at (datetime.date | None | Unset): Date the contact passed away. + contact_frequency_days (int | None | Unset): Target days between interactions; drives losing-touch cadence. + stage (None | str | Unset): Kanban stage like Active, Dormant, Lost. + deleted_at (datetime.datetime | None | Unset): + tags (list[TagPublic] | Unset): + groups (list[GroupPublic] | Unset): + """ first_name: str id: UUID @@ -84,13 +77,7 @@ class ContactPublic: groups: list[GroupPublic] | Unset = UNSET additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) - - - - def to_dict(self) -> dict[str, Any]: - from ..models.group_public import GroupPublic - from ..models.tag_public import TagPublic first_name = self.first_name id = str(self.id) @@ -211,8 +198,6 @@ def to_dict(self) -> dict[str, Any]: tags_item = tags_item_data.to_dict() tags.append(tags_item) - - groups: list[dict[str, Any]] | Unset = UNSET if not isinstance(self.groups, Unset): groups = [] @@ -220,19 +205,18 @@ def to_dict(self) -> dict[str, Any]: groups_item = groups_item_data.to_dict() groups.append(groups_item) - - - field_dict: dict[str, Any] = {} field_dict.update(self.additional_properties) - field_dict.update({ - "first_name": first_name, - "id": id, - "avatar_url": avatar_url, - "last_contacted_at": last_contacted_at, - "created_at": created_at, - "updated_at": updated_at, - }) + field_dict.update( + { + "first_name": first_name, + "id": id, + "avatar_url": avatar_url, + "last_contacted_at": last_contacted_at, + "created_at": created_at, + "updated_at": updated_at, + } + ) if last_name is not UNSET: field_dict["last_name"] = last_name if middle_name is not UNSET: @@ -274,20 +258,16 @@ def to_dict(self) -> dict[str, Any]: return field_dict - - @classmethod def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: from ..models.group_public import GroupPublic from ..models.tag_public import TagPublic + d = dict(src_dict) first_name = d.pop("first_name") id = UUID(d.pop("id")) - - - def _parse_avatar_url(data: object) -> None | str: if data is None: return data @@ -295,7 +275,6 @@ def _parse_avatar_url(data: object) -> None | str: avatar_url = _parse_avatar_url(d.pop("avatar_url")) - def _parse_last_contacted_at(data: object) -> datetime.datetime | None: if data is None: return data @@ -304,8 +283,6 @@ def _parse_last_contacted_at(data: object) -> datetime.datetime | None: raise TypeError() last_contacted_at_type_0 = isoparse(data) - - return last_contacted_at_type_0 except (TypeError, ValueError, AttributeError, KeyError): pass @@ -313,17 +290,10 @@ def _parse_last_contacted_at(data: object) -> datetime.datetime | None: last_contacted_at = _parse_last_contacted_at(d.pop("last_contacted_at")) - created_at = isoparse(d.pop("created_at")) - - - updated_at = isoparse(d.pop("updated_at")) - - - def _parse_last_name(data: object) -> None | str | Unset: if data is None: return data @@ -333,7 +303,6 @@ def _parse_last_name(data: object) -> None | str | Unset: last_name = _parse_last_name(d.pop("last_name", UNSET)) - def _parse_middle_name(data: object) -> None | str | Unset: if data is None: return data @@ -343,7 +312,6 @@ def _parse_middle_name(data: object) -> None | str | Unset: middle_name = _parse_middle_name(d.pop("middle_name", UNSET)) - def _parse_prefix(data: object) -> None | str | Unset: if data is None: return data @@ -353,7 +321,6 @@ def _parse_prefix(data: object) -> None | str | Unset: prefix = _parse_prefix(d.pop("prefix", UNSET)) - def _parse_suffix(data: object) -> None | str | Unset: if data is None: return data @@ -363,7 +330,6 @@ def _parse_suffix(data: object) -> None | str | Unset: suffix = _parse_suffix(d.pop("suffix", UNSET)) - def _parse_nickname(data: object) -> None | str | Unset: if data is None: return data @@ -373,7 +339,6 @@ def _parse_nickname(data: object) -> None | str | Unset: nickname = _parse_nickname(d.pop("nickname", UNSET)) - def _parse_company(data: object) -> None | str | Unset: if data is None: return data @@ -383,7 +348,6 @@ def _parse_company(data: object) -> None | str | Unset: company = _parse_company(d.pop("company", UNSET)) - def _parse_department(data: object) -> None | str | Unset: if data is None: return data @@ -393,7 +357,6 @@ def _parse_department(data: object) -> None | str | Unset: department = _parse_department(d.pop("department", UNSET)) - def _parse_title(data: object) -> None | str | Unset: if data is None: return data @@ -403,7 +366,6 @@ def _parse_title(data: object) -> None | str | Unset: title = _parse_title(d.pop("title", UNSET)) - def _parse_birthday(data: object) -> datetime.date | None | Unset: if data is None: return data @@ -414,8 +376,6 @@ def _parse_birthday(data: object) -> datetime.date | None | Unset: raise TypeError() birthday_type_0 = isoparse(data).date() - - return birthday_type_0 except (TypeError, ValueError, AttributeError, KeyError): pass @@ -423,7 +383,6 @@ def _parse_birthday(data: object) -> datetime.date | None | Unset: birthday = _parse_birthday(d.pop("birthday", UNSET)) - def _parse_how_we_met(data: object) -> None | str | Unset: if data is None: return data @@ -433,7 +392,6 @@ def _parse_how_we_met(data: object) -> None | str | Unset: how_we_met = _parse_how_we_met(d.pop("how_we_met", UNSET)) - is_favorite = d.pop("is_favorite", UNSET) is_archived = d.pop("is_archived", UNSET) @@ -450,8 +408,6 @@ def _parse_deceased_at(data: object) -> datetime.date | None | Unset: raise TypeError() deceased_at_type_0 = isoparse(data).date() - - return deceased_at_type_0 except (TypeError, ValueError, AttributeError, KeyError): pass @@ -459,7 +415,6 @@ def _parse_deceased_at(data: object) -> datetime.date | None | Unset: deceased_at = _parse_deceased_at(d.pop("deceased_at", UNSET)) - def _parse_contact_frequency_days(data: object) -> int | None | Unset: if data is None: return data @@ -469,7 +424,6 @@ def _parse_contact_frequency_days(data: object) -> int | None | Unset: contact_frequency_days = _parse_contact_frequency_days(d.pop("contact_frequency_days", UNSET)) - def _parse_stage(data: object) -> None | str | Unset: if data is None: return data @@ -479,7 +433,6 @@ def _parse_stage(data: object) -> None | str | Unset: stage = _parse_stage(d.pop("stage", UNSET)) - def _parse_deleted_at(data: object) -> datetime.datetime | None | Unset: if data is None: return data @@ -490,8 +443,6 @@ def _parse_deleted_at(data: object) -> datetime.datetime | None | Unset: raise TypeError() deleted_at_type_0 = isoparse(data) - - return deleted_at_type_0 except (TypeError, ValueError, AttributeError, KeyError): pass @@ -499,7 +450,6 @@ def _parse_deleted_at(data: object) -> datetime.datetime | None | Unset: deleted_at = _parse_deleted_at(d.pop("deleted_at", UNSET)) - _tags = d.pop("tags", UNSET) tags: list[TagPublic] | Unset = UNSET if _tags is not UNSET: @@ -507,11 +457,8 @@ def _parse_deleted_at(data: object) -> datetime.datetime | None | Unset: for tags_item_data in _tags: tags_item = TagPublic.from_dict(tags_item_data) - - tags.append(tags_item) - _groups = d.pop("groups", UNSET) groups: list[GroupPublic] | Unset = UNSET if _groups is not UNSET: @@ -519,11 +466,8 @@ def _parse_deleted_at(data: object) -> datetime.datetime | None | Unset: for groups_item_data in _groups: groups_item = GroupPublic.from_dict(groups_item_data) - - groups.append(groups_item) - contact_public = cls( first_name=first_name, id=id, @@ -552,7 +496,6 @@ def _parse_deleted_at(data: object) -> datetime.datetime | None | Unset: groups=groups, ) - contact_public.additional_properties = d return contact_public diff --git a/kindred-sdk/personal_crm_client/models/contact_update.py b/kindred-sdk/personal_crm_client/models/contact_update.py index 36483138..94ecc846 100644 --- a/kindred-sdk/personal_crm_client/models/contact_update.py +++ b/kindred-sdk/personal_crm_client/models/contact_update.py @@ -1,52 +1,43 @@ from __future__ import annotations +import datetime from collections.abc import Mapping -from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator +from typing import Any, TypeVar, cast +from uuid import UUID from attrs import define as _attrs_define from attrs import field as _attrs_field - -from ..types import UNSET, Unset - -from ..types import UNSET, Unset from dateutil.parser import isoparse -from typing import cast -from uuid import UUID -import datetime - - - - +from ..types import UNSET, Unset T = TypeVar("T", bound="ContactUpdate") - @_attrs_define class ContactUpdate: - """ - Attributes: - first_name (None | str | Unset): - last_name (None | str | Unset): - middle_name (None | str | Unset): - prefix (None | str | Unset): - suffix (None | str | Unset): - nickname (None | str | Unset): - company (None | str | Unset): - department (None | str | Unset): - title (None | str | Unset): - birthday (datetime.date | None | Unset): - how_we_met (None | str | Unset): - is_favorite (bool | None | Unset): - is_archived (bool | None | Unset): - is_deceased (bool | None | Unset): - deceased_at (datetime.date | None | Unset): - contact_frequency_days (int | None | Unset): - stage (None | str | Unset): - tag_ids (list[UUID] | None | Unset): - group_ids (list[UUID] | None | Unset): - """ + """ + Attributes: + first_name (None | str | Unset): + last_name (None | str | Unset): + middle_name (None | str | Unset): + prefix (None | str | Unset): + suffix (None | str | Unset): + nickname (None | str | Unset): + company (None | str | Unset): + department (None | str | Unset): + title (None | str | Unset): + birthday (datetime.date | None | Unset): + how_we_met (None | str | Unset): + is_favorite (bool | None | Unset): + is_archived (bool | None | Unset): + is_deceased (bool | None | Unset): + deceased_at (datetime.date | None | Unset): + contact_frequency_days (int | None | Unset): + stage (None | str | Unset): + tag_ids (list[UUID] | None | Unset): + group_ids (list[UUID] | None | Unset): + """ first_name: None | str | Unset = UNSET last_name: None | str | Unset = UNSET @@ -69,10 +60,6 @@ class ContactUpdate: group_ids: list[UUID] | None | Unset = UNSET additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) - - - - def to_dict(self) -> dict[str, Any]: first_name: None | str | Unset if isinstance(self.first_name, Unset): @@ -189,7 +176,6 @@ def to_dict(self) -> dict[str, Any]: tag_ids_type_0_item = str(tag_ids_type_0_item_data) tag_ids.append(tag_ids_type_0_item) - else: tag_ids = self.tag_ids @@ -202,15 +188,12 @@ def to_dict(self) -> dict[str, Any]: group_ids_type_0_item = str(group_ids_type_0_item_data) group_ids.append(group_ids_type_0_item) - else: group_ids = self.group_ids - field_dict: dict[str, Any] = {} field_dict.update(self.additional_properties) - field_dict.update({ - }) + field_dict.update({}) if first_name is not UNSET: field_dict["first_name"] = first_name if last_name is not UNSET: @@ -252,11 +235,10 @@ def to_dict(self) -> dict[str, Any]: return field_dict - - @classmethod def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: d = dict(src_dict) + def _parse_first_name(data: object) -> None | str | Unset: if data is None: return data @@ -266,7 +248,6 @@ def _parse_first_name(data: object) -> None | str | Unset: first_name = _parse_first_name(d.pop("first_name", UNSET)) - def _parse_last_name(data: object) -> None | str | Unset: if data is None: return data @@ -276,7 +257,6 @@ def _parse_last_name(data: object) -> None | str | Unset: last_name = _parse_last_name(d.pop("last_name", UNSET)) - def _parse_middle_name(data: object) -> None | str | Unset: if data is None: return data @@ -286,7 +266,6 @@ def _parse_middle_name(data: object) -> None | str | Unset: middle_name = _parse_middle_name(d.pop("middle_name", UNSET)) - def _parse_prefix(data: object) -> None | str | Unset: if data is None: return data @@ -296,7 +275,6 @@ def _parse_prefix(data: object) -> None | str | Unset: prefix = _parse_prefix(d.pop("prefix", UNSET)) - def _parse_suffix(data: object) -> None | str | Unset: if data is None: return data @@ -306,7 +284,6 @@ def _parse_suffix(data: object) -> None | str | Unset: suffix = _parse_suffix(d.pop("suffix", UNSET)) - def _parse_nickname(data: object) -> None | str | Unset: if data is None: return data @@ -316,7 +293,6 @@ def _parse_nickname(data: object) -> None | str | Unset: nickname = _parse_nickname(d.pop("nickname", UNSET)) - def _parse_company(data: object) -> None | str | Unset: if data is None: return data @@ -326,7 +302,6 @@ def _parse_company(data: object) -> None | str | Unset: company = _parse_company(d.pop("company", UNSET)) - def _parse_department(data: object) -> None | str | Unset: if data is None: return data @@ -336,7 +311,6 @@ def _parse_department(data: object) -> None | str | Unset: department = _parse_department(d.pop("department", UNSET)) - def _parse_title(data: object) -> None | str | Unset: if data is None: return data @@ -346,7 +320,6 @@ def _parse_title(data: object) -> None | str | Unset: title = _parse_title(d.pop("title", UNSET)) - def _parse_birthday(data: object) -> datetime.date | None | Unset: if data is None: return data @@ -357,8 +330,6 @@ def _parse_birthday(data: object) -> datetime.date | None | Unset: raise TypeError() birthday_type_0 = isoparse(data).date() - - return birthday_type_0 except (TypeError, ValueError, AttributeError, KeyError): pass @@ -366,7 +337,6 @@ def _parse_birthday(data: object) -> datetime.date | None | Unset: birthday = _parse_birthday(d.pop("birthday", UNSET)) - def _parse_how_we_met(data: object) -> None | str | Unset: if data is None: return data @@ -376,7 +346,6 @@ def _parse_how_we_met(data: object) -> None | str | Unset: how_we_met = _parse_how_we_met(d.pop("how_we_met", UNSET)) - def _parse_is_favorite(data: object) -> bool | None | Unset: if data is None: return data @@ -386,7 +355,6 @@ def _parse_is_favorite(data: object) -> bool | None | Unset: is_favorite = _parse_is_favorite(d.pop("is_favorite", UNSET)) - def _parse_is_archived(data: object) -> bool | None | Unset: if data is None: return data @@ -396,7 +364,6 @@ def _parse_is_archived(data: object) -> bool | None | Unset: is_archived = _parse_is_archived(d.pop("is_archived", UNSET)) - def _parse_is_deceased(data: object) -> bool | None | Unset: if data is None: return data @@ -406,7 +373,6 @@ def _parse_is_deceased(data: object) -> bool | None | Unset: is_deceased = _parse_is_deceased(d.pop("is_deceased", UNSET)) - def _parse_deceased_at(data: object) -> datetime.date | None | Unset: if data is None: return data @@ -417,8 +383,6 @@ def _parse_deceased_at(data: object) -> datetime.date | None | Unset: raise TypeError() deceased_at_type_0 = isoparse(data).date() - - return deceased_at_type_0 except (TypeError, ValueError, AttributeError, KeyError): pass @@ -426,7 +390,6 @@ def _parse_deceased_at(data: object) -> datetime.date | None | Unset: deceased_at = _parse_deceased_at(d.pop("deceased_at", UNSET)) - def _parse_contact_frequency_days(data: object) -> int | None | Unset: if data is None: return data @@ -436,7 +399,6 @@ def _parse_contact_frequency_days(data: object) -> int | None | Unset: contact_frequency_days = _parse_contact_frequency_days(d.pop("contact_frequency_days", UNSET)) - def _parse_stage(data: object) -> None | str | Unset: if data is None: return data @@ -446,7 +408,6 @@ def _parse_stage(data: object) -> None | str | Unset: stage = _parse_stage(d.pop("stage", UNSET)) - def _parse_tag_ids(data: object) -> list[UUID] | None | Unset: if data is None: return data @@ -457,11 +418,9 @@ def _parse_tag_ids(data: object) -> list[UUID] | None | Unset: raise TypeError() tag_ids_type_0 = [] _tag_ids_type_0 = data - for tag_ids_type_0_item_data in (_tag_ids_type_0): + for tag_ids_type_0_item_data in _tag_ids_type_0: tag_ids_type_0_item = UUID(tag_ids_type_0_item_data) - - tag_ids_type_0.append(tag_ids_type_0_item) return tag_ids_type_0 @@ -471,7 +430,6 @@ def _parse_tag_ids(data: object) -> list[UUID] | None | Unset: tag_ids = _parse_tag_ids(d.pop("tag_ids", UNSET)) - def _parse_group_ids(data: object) -> list[UUID] | None | Unset: if data is None: return data @@ -482,11 +440,9 @@ def _parse_group_ids(data: object) -> list[UUID] | None | Unset: raise TypeError() group_ids_type_0 = [] _group_ids_type_0 = data - for group_ids_type_0_item_data in (_group_ids_type_0): + for group_ids_type_0_item_data in _group_ids_type_0: group_ids_type_0_item = UUID(group_ids_type_0_item_data) - - group_ids_type_0.append(group_ids_type_0_item) return group_ids_type_0 @@ -496,7 +452,6 @@ def _parse_group_ids(data: object) -> list[UUID] | None | Unset: group_ids = _parse_group_ids(d.pop("group_ids", UNSET)) - contact_update = cls( first_name=first_name, last_name=last_name, @@ -519,7 +474,6 @@ def _parse_group_ids(data: object) -> list[UUID] | None | Unset: group_ids=group_ids, ) - contact_update.additional_properties = d return contact_update diff --git a/kindred-sdk/personal_crm_client/models/contacts_public.py b/kindred-sdk/personal_crm_client/models/contacts_public.py index 3bfb0f48..1d379cc2 100644 --- a/kindred-sdk/personal_crm_client/models/contacts_public.py +++ b/kindred-sdk/personal_crm_client/models/contacts_public.py @@ -1,79 +1,61 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator +from typing import TYPE_CHECKING, Any, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from ..types import UNSET, Unset - -from typing import cast - if TYPE_CHECKING: - from ..models.contact_public import ContactPublic - - - + from ..models.contact_public import ContactPublic T = TypeVar("T", bound="ContactsPublic") - @_attrs_define class ContactsPublic: - """ - Attributes: - data (list[ContactPublic]): - count (int): - """ + """ + Attributes: + data (list[ContactPublic]): + count (int): + """ data: list[ContactPublic] count: int additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) - - - - def to_dict(self) -> dict[str, Any]: - from ..models.contact_public import ContactPublic data = [] for data_item_data in self.data: data_item = data_item_data.to_dict() data.append(data_item) - - count = self.count - field_dict: dict[str, Any] = {} field_dict.update(self.additional_properties) - field_dict.update({ - "data": data, - "count": count, - }) + field_dict.update( + { + "data": data, + "count": count, + } + ) return field_dict - - @classmethod def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: from ..models.contact_public import ContactPublic + d = dict(src_dict) data = [] _data = d.pop("data") - for data_item_data in (_data): + for data_item_data in _data: data_item = ContactPublic.from_dict(data_item_data) - - data.append(data_item) - count = d.pop("count") contacts_public = cls( @@ -81,7 +63,6 @@ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: count=count, ) - contacts_public.additional_properties = d return contacts_public diff --git a/kindred-sdk/personal_crm_client/models/custom_field_definition_create.py b/kindred-sdk/personal_crm_client/models/custom_field_definition_create.py index a7fa70f3..12cc658e 100644 --- a/kindred-sdk/personal_crm_client/models/custom_field_definition_create.py +++ b/kindred-sdk/personal_crm_client/models/custom_field_definition_create.py @@ -1,47 +1,34 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator +from typing import Any, TypeVar, cast from attrs import define as _attrs_define from attrs import field as _attrs_field from ..types import UNSET, Unset -from ..types import UNSET, Unset -from typing import cast - - - - - - T = TypeVar("T", bound="CustomFieldDefinitionCreate") - @_attrs_define class CustomFieldDefinitionCreate: - """ - Attributes: - name (str): Custom field name shown in the UI. - field_type (str | Unset): Field type: text, number, date, boolean, or select. Default: 'text'. - description (None | str | Unset): Help text displayed alongside the field in the UI. - options (None | str | Unset): Comma-separated options for field_type="select". - icon (None | str | Unset): Icon slug for the UI (e.g. "heart", "book"). - """ + """ + Attributes: + name (str): Custom field name shown in the UI. + field_type (str | Unset): Field type: text, number, date, boolean, or select. Default: 'text'. + description (None | str | Unset): Help text displayed alongside the field in the UI. + options (None | str | Unset): Comma-separated options for field_type="select". + icon (None | str | Unset): Icon slug for the UI (e.g. "heart", "book"). + """ name: str - field_type: str | Unset = 'text' + field_type: str | Unset = "text" description: None | str | Unset = UNSET options: None | str | Unset = UNSET icon: None | str | Unset = UNSET additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) - - - - def to_dict(self) -> dict[str, Any]: name = self.name @@ -65,12 +52,13 @@ def to_dict(self) -> dict[str, Any]: else: icon = self.icon - field_dict: dict[str, Any] = {} field_dict.update(self.additional_properties) - field_dict.update({ - "name": name, - }) + field_dict.update( + { + "name": name, + } + ) if field_type is not UNSET: field_dict["field_type"] = field_type if description is not UNSET: @@ -82,8 +70,6 @@ def to_dict(self) -> dict[str, Any]: return field_dict - - @classmethod def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: d = dict(src_dict) @@ -100,7 +86,6 @@ def _parse_description(data: object) -> None | str | Unset: description = _parse_description(d.pop("description", UNSET)) - def _parse_options(data: object) -> None | str | Unset: if data is None: return data @@ -110,7 +95,6 @@ def _parse_options(data: object) -> None | str | Unset: options = _parse_options(d.pop("options", UNSET)) - def _parse_icon(data: object) -> None | str | Unset: if data is None: return data @@ -120,7 +104,6 @@ def _parse_icon(data: object) -> None | str | Unset: icon = _parse_icon(d.pop("icon", UNSET)) - custom_field_definition_create = cls( name=name, field_type=field_type, @@ -129,7 +112,6 @@ def _parse_icon(data: object) -> None | str | Unset: icon=icon, ) - custom_field_definition_create.additional_properties = d return custom_field_definition_create diff --git a/kindred-sdk/personal_crm_client/models/custom_field_definition_public.py b/kindred-sdk/personal_crm_client/models/custom_field_definition_public.py index 77475d46..d8feeac0 100644 --- a/kindred-sdk/personal_crm_client/models/custom_field_definition_public.py +++ b/kindred-sdk/personal_crm_client/models/custom_field_definition_public.py @@ -1,54 +1,41 @@ from __future__ import annotations +import datetime from collections.abc import Mapping -from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator +from typing import Any, TypeVar, cast +from uuid import UUID from attrs import define as _attrs_define from attrs import field as _attrs_field - -from ..types import UNSET, Unset - -from ..types import UNSET, Unset from dateutil.parser import isoparse -from typing import cast -from uuid import UUID -import datetime - - - - +from ..types import UNSET, Unset T = TypeVar("T", bound="CustomFieldDefinitionPublic") - @_attrs_define class CustomFieldDefinitionPublic: - """ - Attributes: - name (str): Custom field name shown in the UI. - id (UUID): - created_at (datetime.datetime): - field_type (str | Unset): Field type: text, number, date, boolean, or select. Default: 'text'. - description (None | str | Unset): Help text displayed alongside the field in the UI. - options (None | str | Unset): Comma-separated options for field_type="select". - icon (None | str | Unset): Icon slug for the UI (e.g. "heart", "book"). - """ + """ + Attributes: + name (str): Custom field name shown in the UI. + id (UUID): + created_at (datetime.datetime): + field_type (str | Unset): Field type: text, number, date, boolean, or select. Default: 'text'. + description (None | str | Unset): Help text displayed alongside the field in the UI. + options (None | str | Unset): Comma-separated options for field_type="select". + icon (None | str | Unset): Icon slug for the UI (e.g. "heart", "book"). + """ name: str id: UUID created_at: datetime.datetime - field_type: str | Unset = 'text' + field_type: str | Unset = "text" description: None | str | Unset = UNSET options: None | str | Unset = UNSET icon: None | str | Unset = UNSET additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) - - - - def to_dict(self) -> dict[str, Any]: name = self.name @@ -76,14 +63,15 @@ def to_dict(self) -> dict[str, Any]: else: icon = self.icon - field_dict: dict[str, Any] = {} field_dict.update(self.additional_properties) - field_dict.update({ - "name": name, - "id": id, - "created_at": created_at, - }) + field_dict.update( + { + "name": name, + "id": id, + "created_at": created_at, + } + ) if field_type is not UNSET: field_dict["field_type"] = field_type if description is not UNSET: @@ -95,8 +83,6 @@ def to_dict(self) -> dict[str, Any]: return field_dict - - @classmethod def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: d = dict(src_dict) @@ -104,14 +90,8 @@ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: id = UUID(d.pop("id")) - - - created_at = isoparse(d.pop("created_at")) - - - field_type = d.pop("field_type", UNSET) def _parse_description(data: object) -> None | str | Unset: @@ -123,7 +103,6 @@ def _parse_description(data: object) -> None | str | Unset: description = _parse_description(d.pop("description", UNSET)) - def _parse_options(data: object) -> None | str | Unset: if data is None: return data @@ -133,7 +112,6 @@ def _parse_options(data: object) -> None | str | Unset: options = _parse_options(d.pop("options", UNSET)) - def _parse_icon(data: object) -> None | str | Unset: if data is None: return data @@ -143,7 +121,6 @@ def _parse_icon(data: object) -> None | str | Unset: icon = _parse_icon(d.pop("icon", UNSET)) - custom_field_definition_public = cls( name=name, id=id, @@ -154,7 +131,6 @@ def _parse_icon(data: object) -> None | str | Unset: icon=icon, ) - custom_field_definition_public.additional_properties = d return custom_field_definition_public diff --git a/kindred-sdk/personal_crm_client/models/custom_field_definition_update.py b/kindred-sdk/personal_crm_client/models/custom_field_definition_update.py index 3b370c1f..749c4e10 100644 --- a/kindred-sdk/personal_crm_client/models/custom_field_definition_update.py +++ b/kindred-sdk/personal_crm_client/models/custom_field_definition_update.py @@ -1,35 +1,26 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator +from typing import Any, TypeVar, cast from attrs import define as _attrs_define from attrs import field as _attrs_field from ..types import UNSET, Unset -from ..types import UNSET, Unset -from typing import cast - - - - - - T = TypeVar("T", bound="CustomFieldDefinitionUpdate") - @_attrs_define class CustomFieldDefinitionUpdate: - """ - Attributes: - name (None | str | Unset): - field_type (None | str | Unset): - description (None | str | Unset): - options (None | str | Unset): - icon (None | str | Unset): - """ + """ + Attributes: + name (None | str | Unset): + field_type (None | str | Unset): + description (None | str | Unset): + options (None | str | Unset): + icon (None | str | Unset): + """ name: None | str | Unset = UNSET field_type: None | str | Unset = UNSET @@ -38,10 +29,6 @@ class CustomFieldDefinitionUpdate: icon: None | str | Unset = UNSET additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) - - - - def to_dict(self) -> dict[str, Any]: name: None | str | Unset if isinstance(self.name, Unset): @@ -73,11 +60,9 @@ def to_dict(self) -> dict[str, Any]: else: icon = self.icon - field_dict: dict[str, Any] = {} field_dict.update(self.additional_properties) - field_dict.update({ - }) + field_dict.update({}) if name is not UNSET: field_dict["name"] = name if field_type is not UNSET: @@ -91,11 +76,10 @@ def to_dict(self) -> dict[str, Any]: return field_dict - - @classmethod def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: d = dict(src_dict) + def _parse_name(data: object) -> None | str | Unset: if data is None: return data @@ -105,7 +89,6 @@ def _parse_name(data: object) -> None | str | Unset: name = _parse_name(d.pop("name", UNSET)) - def _parse_field_type(data: object) -> None | str | Unset: if data is None: return data @@ -115,7 +98,6 @@ def _parse_field_type(data: object) -> None | str | Unset: field_type = _parse_field_type(d.pop("field_type", UNSET)) - def _parse_description(data: object) -> None | str | Unset: if data is None: return data @@ -125,7 +107,6 @@ def _parse_description(data: object) -> None | str | Unset: description = _parse_description(d.pop("description", UNSET)) - def _parse_options(data: object) -> None | str | Unset: if data is None: return data @@ -135,7 +116,6 @@ def _parse_options(data: object) -> None | str | Unset: options = _parse_options(d.pop("options", UNSET)) - def _parse_icon(data: object) -> None | str | Unset: if data is None: return data @@ -145,7 +125,6 @@ def _parse_icon(data: object) -> None | str | Unset: icon = _parse_icon(d.pop("icon", UNSET)) - custom_field_definition_update = cls( name=name, field_type=field_type, @@ -154,7 +133,6 @@ def _parse_icon(data: object) -> None | str | Unset: icon=icon, ) - custom_field_definition_update.additional_properties = d return custom_field_definition_update diff --git a/kindred-sdk/personal_crm_client/models/custom_field_value_create.py b/kindred-sdk/personal_crm_client/models/custom_field_value_create.py index c18436ea..c01d34c4 100644 --- a/kindred-sdk/personal_crm_client/models/custom_field_value_create.py +++ b/kindred-sdk/personal_crm_client/models/custom_field_value_create.py @@ -1,42 +1,29 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator +from typing import Any, TypeVar +from uuid import UUID from attrs import define as _attrs_define from attrs import field as _attrs_field -from ..types import UNSET, Unset - -from uuid import UUID - - - - - - T = TypeVar("T", bound="CustomFieldValueCreate") - @_attrs_define class CustomFieldValueCreate: - """ - Attributes: - value (str): Value as a string; coerced from the declared field_type. - contact_id (UUID): - field_definition_id (UUID): - """ + """ + Attributes: + value (str): Value as a string; coerced from the declared field_type. + contact_id (UUID): + field_definition_id (UUID): + """ value: str contact_id: UUID field_definition_id: UUID additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) - - - - def to_dict(self) -> dict[str, Any]: value = self.value @@ -44,19 +31,18 @@ def to_dict(self) -> dict[str, Any]: field_definition_id = str(self.field_definition_id) - field_dict: dict[str, Any] = {} field_dict.update(self.additional_properties) - field_dict.update({ - "value": value, - "contact_id": contact_id, - "field_definition_id": field_definition_id, - }) + field_dict.update( + { + "value": value, + "contact_id": contact_id, + "field_definition_id": field_definition_id, + } + ) return field_dict - - @classmethod def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: d = dict(src_dict) @@ -64,21 +50,14 @@ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: contact_id = UUID(d.pop("contact_id")) - - - field_definition_id = UUID(d.pop("field_definition_id")) - - - custom_field_value_create = cls( value=value, contact_id=contact_id, field_definition_id=field_definition_id, ) - custom_field_value_create.additional_properties = d return custom_field_value_create diff --git a/kindred-sdk/personal_crm_client/models/custom_field_value_public.py b/kindred-sdk/personal_crm_client/models/custom_field_value_public.py index 8e085431..dd09f841 100644 --- a/kindred-sdk/personal_crm_client/models/custom_field_value_public.py +++ b/kindred-sdk/personal_crm_client/models/custom_field_value_public.py @@ -1,36 +1,27 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator +from typing import Any, TypeVar, cast +from uuid import UUID from attrs import define as _attrs_define from attrs import field as _attrs_field from ..types import UNSET, Unset -from ..types import UNSET, Unset -from typing import cast -from uuid import UUID - - - - - - T = TypeVar("T", bound="CustomFieldValuePublic") - @_attrs_define class CustomFieldValuePublic: - """ - Attributes: - value (str): Value as a string; coerced from the declared field_type. - id (UUID): - contact_id (UUID): - field_definition_id (UUID): - field_name (None | str | Unset): - """ + """ + Attributes: + value (str): Value as a string; coerced from the declared field_type. + id (UUID): + contact_id (UUID): + field_definition_id (UUID): + field_name (None | str | Unset): + """ value: str id: UUID @@ -39,10 +30,6 @@ class CustomFieldValuePublic: field_name: None | str | Unset = UNSET additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) - - - - def to_dict(self) -> dict[str, Any]: value = self.value @@ -58,22 +45,21 @@ def to_dict(self) -> dict[str, Any]: else: field_name = self.field_name - field_dict: dict[str, Any] = {} field_dict.update(self.additional_properties) - field_dict.update({ - "value": value, - "id": id, - "contact_id": contact_id, - "field_definition_id": field_definition_id, - }) + field_dict.update( + { + "value": value, + "id": id, + "contact_id": contact_id, + "field_definition_id": field_definition_id, + } + ) if field_name is not UNSET: field_dict["field_name"] = field_name return field_dict - - @classmethod def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: d = dict(src_dict) @@ -81,19 +67,10 @@ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: id = UUID(d.pop("id")) - - - contact_id = UUID(d.pop("contact_id")) - - - field_definition_id = UUID(d.pop("field_definition_id")) - - - def _parse_field_name(data: object) -> None | str | Unset: if data is None: return data @@ -103,7 +80,6 @@ def _parse_field_name(data: object) -> None | str | Unset: field_name = _parse_field_name(d.pop("field_name", UNSET)) - custom_field_value_public = cls( value=value, id=id, @@ -112,7 +88,6 @@ def _parse_field_name(data: object) -> None | str | Unset: field_name=field_name, ) - custom_field_value_public.additional_properties = d return custom_field_value_public diff --git a/kindred-sdk/personal_crm_client/models/custom_field_value_update.py b/kindred-sdk/personal_crm_client/models/custom_field_value_update.py index b1c1225f..d5300a8b 100644 --- a/kindred-sdk/personal_crm_client/models/custom_field_value_update.py +++ b/kindred-sdk/personal_crm_client/models/custom_field_value_update.py @@ -1,39 +1,26 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator +from typing import Any, TypeVar, cast from attrs import define as _attrs_define from attrs import field as _attrs_field from ..types import UNSET, Unset -from ..types import UNSET, Unset -from typing import cast - - - - - - T = TypeVar("T", bound="CustomFieldValueUpdate") - @_attrs_define class CustomFieldValueUpdate: - """ - Attributes: - value (None | str | Unset): - """ + """ + Attributes: + value (None | str | Unset): + """ value: None | str | Unset = UNSET additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) - - - - def to_dict(self) -> dict[str, Any]: value: None | str | Unset if isinstance(self.value, Unset): @@ -41,21 +28,18 @@ def to_dict(self) -> dict[str, Any]: else: value = self.value - field_dict: dict[str, Any] = {} field_dict.update(self.additional_properties) - field_dict.update({ - }) + field_dict.update({}) if value is not UNSET: field_dict["value"] = value return field_dict - - @classmethod def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: d = dict(src_dict) + def _parse_value(data: object) -> None | str | Unset: if data is None: return data @@ -65,12 +49,10 @@ def _parse_value(data: object) -> None | str | Unset: value = _parse_value(d.pop("value", UNSET)) - custom_field_value_update = cls( value=value, ) - custom_field_value_update.additional_properties = d return custom_field_value_update diff --git a/kindred-sdk/personal_crm_client/models/debt_create.py b/kindred-sdk/personal_crm_client/models/debt_create.py index 5b8c1fc0..50b51fed 100644 --- a/kindred-sdk/personal_crm_client/models/debt_create.py +++ b/kindred-sdk/personal_crm_client/models/debt_create.py @@ -1,55 +1,42 @@ from __future__ import annotations +import datetime from collections.abc import Mapping -from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator +from typing import Any, TypeVar, cast +from uuid import UUID from attrs import define as _attrs_define from attrs import field as _attrs_field - -from ..types import UNSET, Unset +from dateutil.parser import isoparse from ..models.debt_direction import DebtDirection from ..types import UNSET, Unset -from dateutil.parser import isoparse -from typing import cast -from uuid import UUID -import datetime - - - - - T = TypeVar("T", bound="DebtCreate") - @_attrs_define class DebtCreate: - """ - Attributes: - direction (DebtDirection): - amount (float): Amount owed; must be greater than zero. - contact_id (UUID): - currency (str | Unset): ISO 4217 currency code. Default: 'USD'. - reason (None | str | Unset): What the debt is for. - is_settled (bool | Unset): Marked paid off. Default: False. - settled_at (datetime.date | None | Unset): Date the debt was settled. - """ + """ + Attributes: + direction (DebtDirection): + amount (float): Amount owed; must be greater than zero. + contact_id (UUID): + currency (str | Unset): ISO 4217 currency code. Default: 'USD'. + reason (None | str | Unset): What the debt is for. + is_settled (bool | Unset): Marked paid off. Default: False. + settled_at (datetime.date | None | Unset): Date the debt was settled. + """ direction: DebtDirection amount: float contact_id: UUID - currency: str | Unset = 'USD' + currency: str | Unset = "USD" reason: None | str | Unset = UNSET is_settled: bool | Unset = False settled_at: datetime.date | None | Unset = UNSET additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) - - - - def to_dict(self) -> dict[str, Any]: direction = self.direction.value @@ -75,14 +62,15 @@ def to_dict(self) -> dict[str, Any]: else: settled_at = self.settled_at - field_dict: dict[str, Any] = {} field_dict.update(self.additional_properties) - field_dict.update({ - "direction": direction, - "amount": amount, - "contact_id": contact_id, - }) + field_dict.update( + { + "direction": direction, + "amount": amount, + "contact_id": contact_id, + } + ) if currency is not UNSET: field_dict["currency"] = currency if reason is not UNSET: @@ -94,23 +82,15 @@ def to_dict(self) -> dict[str, Any]: return field_dict - - @classmethod def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: d = dict(src_dict) direction = DebtDirection(d.pop("direction")) - - - amount = d.pop("amount") contact_id = UUID(d.pop("contact_id")) - - - currency = d.pop("currency", UNSET) def _parse_reason(data: object) -> None | str | Unset: @@ -122,7 +102,6 @@ def _parse_reason(data: object) -> None | str | Unset: reason = _parse_reason(d.pop("reason", UNSET)) - is_settled = d.pop("is_settled", UNSET) def _parse_settled_at(data: object) -> datetime.date | None | Unset: @@ -135,8 +114,6 @@ def _parse_settled_at(data: object) -> datetime.date | None | Unset: raise TypeError() settled_at_type_0 = isoparse(data).date() - - return settled_at_type_0 except (TypeError, ValueError, AttributeError, KeyError): pass @@ -144,7 +121,6 @@ def _parse_settled_at(data: object) -> datetime.date | None | Unset: settled_at = _parse_settled_at(d.pop("settled_at", UNSET)) - debt_create = cls( direction=direction, amount=amount, @@ -155,7 +131,6 @@ def _parse_settled_at(data: object) -> datetime.date | None | Unset: settled_at=settled_at, ) - debt_create.additional_properties = d return debt_create diff --git a/kindred-sdk/personal_crm_client/models/debt_direction.py b/kindred-sdk/personal_crm_client/models/debt_direction.py index f6819da5..2ddbfd61 100644 --- a/kindred-sdk/personal_crm_client/models/debt_direction.py +++ b/kindred-sdk/personal_crm_client/models/debt_direction.py @@ -1,5 +1,6 @@ from enum import Enum + class DebtDirection(str, Enum): I_OWE = "i_owe" THEY_OWE = "they_owe" diff --git a/kindred-sdk/personal_crm_client/models/debt_public.py b/kindred-sdk/personal_crm_client/models/debt_public.py index c39ea331..425e29c7 100644 --- a/kindred-sdk/personal_crm_client/models/debt_public.py +++ b/kindred-sdk/personal_crm_client/models/debt_public.py @@ -1,59 +1,46 @@ from __future__ import annotations +import datetime from collections.abc import Mapping -from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator +from typing import Any, TypeVar, cast +from uuid import UUID from attrs import define as _attrs_define from attrs import field as _attrs_field - -from ..types import UNSET, Unset +from dateutil.parser import isoparse from ..models.debt_direction import DebtDirection from ..types import UNSET, Unset -from dateutil.parser import isoparse -from typing import cast -from uuid import UUID -import datetime - - - - - T = TypeVar("T", bound="DebtPublic") - @_attrs_define class DebtPublic: - """ - Attributes: - direction (DebtDirection): - amount (float): Amount owed; must be greater than zero. - id (UUID): - contact_id (UUID): - created_at (datetime.datetime): - currency (str | Unset): ISO 4217 currency code. Default: 'USD'. - reason (None | str | Unset): What the debt is for. - is_settled (bool | Unset): Marked paid off. Default: False. - settled_at (datetime.date | None | Unset): Date the debt was settled. - """ + """ + Attributes: + direction (DebtDirection): + amount (float): Amount owed; must be greater than zero. + id (UUID): + contact_id (UUID): + created_at (datetime.datetime): + currency (str | Unset): ISO 4217 currency code. Default: 'USD'. + reason (None | str | Unset): What the debt is for. + is_settled (bool | Unset): Marked paid off. Default: False. + settled_at (datetime.date | None | Unset): Date the debt was settled. + """ direction: DebtDirection amount: float id: UUID contact_id: UUID created_at: datetime.datetime - currency: str | Unset = 'USD' + currency: str | Unset = "USD" reason: None | str | Unset = UNSET is_settled: bool | Unset = False settled_at: datetime.date | None | Unset = UNSET additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) - - - - def to_dict(self) -> dict[str, Any]: direction = self.direction.value @@ -83,16 +70,17 @@ def to_dict(self) -> dict[str, Any]: else: settled_at = self.settled_at - field_dict: dict[str, Any] = {} field_dict.update(self.additional_properties) - field_dict.update({ - "direction": direction, - "amount": amount, - "id": id, - "contact_id": contact_id, - "created_at": created_at, - }) + field_dict.update( + { + "direction": direction, + "amount": amount, + "id": id, + "contact_id": contact_id, + "created_at": created_at, + } + ) if currency is not UNSET: field_dict["currency"] = currency if reason is not UNSET: @@ -104,33 +92,19 @@ def to_dict(self) -> dict[str, Any]: return field_dict - - @classmethod def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: d = dict(src_dict) direction = DebtDirection(d.pop("direction")) - - - amount = d.pop("amount") id = UUID(d.pop("id")) - - - contact_id = UUID(d.pop("contact_id")) - - - created_at = isoparse(d.pop("created_at")) - - - currency = d.pop("currency", UNSET) def _parse_reason(data: object) -> None | str | Unset: @@ -142,7 +116,6 @@ def _parse_reason(data: object) -> None | str | Unset: reason = _parse_reason(d.pop("reason", UNSET)) - is_settled = d.pop("is_settled", UNSET) def _parse_settled_at(data: object) -> datetime.date | None | Unset: @@ -155,8 +128,6 @@ def _parse_settled_at(data: object) -> datetime.date | None | Unset: raise TypeError() settled_at_type_0 = isoparse(data).date() - - return settled_at_type_0 except (TypeError, ValueError, AttributeError, KeyError): pass @@ -164,7 +135,6 @@ def _parse_settled_at(data: object) -> datetime.date | None | Unset: settled_at = _parse_settled_at(d.pop("settled_at", UNSET)) - debt_public = cls( direction=direction, amount=amount, @@ -177,7 +147,6 @@ def _parse_settled_at(data: object) -> datetime.date | None | Unset: settled_at=settled_at, ) - debt_public.additional_properties = d return debt_public diff --git a/kindred-sdk/personal_crm_client/models/debt_update.py b/kindred-sdk/personal_crm_client/models/debt_update.py index 7589c2fc..faf7a58c 100644 --- a/kindred-sdk/personal_crm_client/models/debt_update.py +++ b/kindred-sdk/personal_crm_client/models/debt_update.py @@ -1,39 +1,30 @@ from __future__ import annotations +import datetime from collections.abc import Mapping -from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator +from typing import Any, TypeVar, cast from attrs import define as _attrs_define from attrs import field as _attrs_field - -from ..types import UNSET, Unset +from dateutil.parser import isoparse from ..models.debt_direction import DebtDirection from ..types import UNSET, Unset -from dateutil.parser import isoparse -from typing import cast -import datetime - - - - - T = TypeVar("T", bound="DebtUpdate") - @_attrs_define class DebtUpdate: - """ - Attributes: - direction (DebtDirection | None | Unset): - amount (float | None | Unset): - currency (None | str | Unset): - reason (None | str | Unset): - is_settled (bool | None | Unset): - settled_at (datetime.date | None | Unset): - """ + """ + Attributes: + direction (DebtDirection | None | Unset): + amount (float | None | Unset): + currency (None | str | Unset): + reason (None | str | Unset): + is_settled (bool | None | Unset): + settled_at (datetime.date | None | Unset): + """ direction: DebtDirection | None | Unset = UNSET amount: float | None | Unset = UNSET @@ -43,10 +34,6 @@ class DebtUpdate: settled_at: datetime.date | None | Unset = UNSET additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) - - - - def to_dict(self) -> dict[str, Any]: direction: None | str | Unset if isinstance(self.direction, Unset): @@ -88,11 +75,9 @@ def to_dict(self) -> dict[str, Any]: else: settled_at = self.settled_at - field_dict: dict[str, Any] = {} field_dict.update(self.additional_properties) - field_dict.update({ - }) + field_dict.update({}) if direction is not UNSET: field_dict["direction"] = direction if amount is not UNSET: @@ -108,11 +93,10 @@ def to_dict(self) -> dict[str, Any]: return field_dict - - @classmethod def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: d = dict(src_dict) + def _parse_direction(data: object) -> DebtDirection | None | Unset: if data is None: return data @@ -123,8 +107,6 @@ def _parse_direction(data: object) -> DebtDirection | None | Unset: raise TypeError() direction_type_0 = DebtDirection(data) - - return direction_type_0 except (TypeError, ValueError, AttributeError, KeyError): pass @@ -132,7 +114,6 @@ def _parse_direction(data: object) -> DebtDirection | None | Unset: direction = _parse_direction(d.pop("direction", UNSET)) - def _parse_amount(data: object) -> float | None | Unset: if data is None: return data @@ -142,7 +123,6 @@ def _parse_amount(data: object) -> float | None | Unset: amount = _parse_amount(d.pop("amount", UNSET)) - def _parse_currency(data: object) -> None | str | Unset: if data is None: return data @@ -152,7 +132,6 @@ def _parse_currency(data: object) -> None | str | Unset: currency = _parse_currency(d.pop("currency", UNSET)) - def _parse_reason(data: object) -> None | str | Unset: if data is None: return data @@ -162,7 +141,6 @@ def _parse_reason(data: object) -> None | str | Unset: reason = _parse_reason(d.pop("reason", UNSET)) - def _parse_is_settled(data: object) -> bool | None | Unset: if data is None: return data @@ -172,7 +150,6 @@ def _parse_is_settled(data: object) -> bool | None | Unset: is_settled = _parse_is_settled(d.pop("is_settled", UNSET)) - def _parse_settled_at(data: object) -> datetime.date | None | Unset: if data is None: return data @@ -183,8 +160,6 @@ def _parse_settled_at(data: object) -> datetime.date | None | Unset: raise TypeError() settled_at_type_0 = isoparse(data).date() - - return settled_at_type_0 except (TypeError, ValueError, AttributeError, KeyError): pass @@ -192,7 +167,6 @@ def _parse_settled_at(data: object) -> datetime.date | None | Unset: settled_at = _parse_settled_at(d.pop("settled_at", UNSET)) - debt_update = cls( direction=direction, amount=amount, @@ -202,7 +176,6 @@ def _parse_settled_at(data: object) -> datetime.date | None | Unset: settled_at=settled_at, ) - debt_update.additional_properties = d return debt_update diff --git a/kindred-sdk/personal_crm_client/models/debts_public.py b/kindred-sdk/personal_crm_client/models/debts_public.py index 1a4f7f91..57908307 100644 --- a/kindred-sdk/personal_crm_client/models/debts_public.py +++ b/kindred-sdk/personal_crm_client/models/debts_public.py @@ -1,79 +1,61 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator +from typing import TYPE_CHECKING, Any, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from ..types import UNSET, Unset - -from typing import cast - if TYPE_CHECKING: - from ..models.debt_public import DebtPublic - - - + from ..models.debt_public import DebtPublic T = TypeVar("T", bound="DebtsPublic") - @_attrs_define class DebtsPublic: - """ - Attributes: - data (list[DebtPublic]): - count (int): - """ + """ + Attributes: + data (list[DebtPublic]): + count (int): + """ data: list[DebtPublic] count: int additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) - - - - def to_dict(self) -> dict[str, Any]: - from ..models.debt_public import DebtPublic data = [] for data_item_data in self.data: data_item = data_item_data.to_dict() data.append(data_item) - - count = self.count - field_dict: dict[str, Any] = {} field_dict.update(self.additional_properties) - field_dict.update({ - "data": data, - "count": count, - }) + field_dict.update( + { + "data": data, + "count": count, + } + ) return field_dict - - @classmethod def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: from ..models.debt_public import DebtPublic + d = dict(src_dict) data = [] _data = d.pop("data") - for data_item_data in (_data): + for data_item_data in _data: data_item = DebtPublic.from_dict(data_item_data) - - data.append(data_item) - count = d.pop("count") debts_public = cls( @@ -81,7 +63,6 @@ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: count=count, ) - debts_public.additional_properties = d return debts_public diff --git a/kindred-sdk/personal_crm_client/models/gift_create.py b/kindred-sdk/personal_crm_client/models/gift_create.py index d8400a4b..52a53109 100644 --- a/kindred-sdk/personal_crm_client/models/gift_create.py +++ b/kindred-sdk/personal_crm_client/models/gift_create.py @@ -1,43 +1,34 @@ from __future__ import annotations +import datetime from collections.abc import Mapping -from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator +from typing import Any, TypeVar, cast +from uuid import UUID from attrs import define as _attrs_define from attrs import field as _attrs_field - -from ..types import UNSET, Unset +from dateutil.parser import isoparse from ..models.gift_status import GiftStatus from ..types import UNSET, Unset -from dateutil.parser import isoparse -from typing import cast -from uuid import UUID -import datetime - - - - - T = TypeVar("T", bound="GiftCreate") - @_attrs_define class GiftCreate: - """ - Attributes: - name (str): Gift name. - contact_id (UUID): - description (None | str | Unset): Details about the gift. - status (GiftStatus | Unset): - occasion (None | str | Unset): Occasion like Birthday, Christmas, Housewarming. - gift_date (datetime.date | None | Unset): When the gift was given or received. - value_amount (float | None | Unset): Monetary cost or value. - value_currency (str | Unset): ISO 4217 currency code. Default: 'USD'. - url (None | str | Unset): Link to the product page (e.g. Amazon). - """ + """ + Attributes: + name (str): Gift name. + contact_id (UUID): + description (None | str | Unset): Details about the gift. + status (GiftStatus | Unset): + occasion (None | str | Unset): Occasion like Birthday, Christmas, Housewarming. + gift_date (datetime.date | None | Unset): When the gift was given or received. + value_amount (float | None | Unset): Monetary cost or value. + value_currency (str | Unset): ISO 4217 currency code. Default: 'USD'. + url (None | str | Unset): Link to the product page (e.g. Amazon). + """ name: str contact_id: UUID @@ -46,14 +37,10 @@ class GiftCreate: occasion: None | str | Unset = UNSET gift_date: datetime.date | None | Unset = UNSET value_amount: float | None | Unset = UNSET - value_currency: str | Unset = 'USD' + value_currency: str | Unset = "USD" url: None | str | Unset = UNSET additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) - - - - def to_dict(self) -> dict[str, Any]: name = self.name @@ -69,7 +56,6 @@ def to_dict(self) -> dict[str, Any]: if not isinstance(self.status, Unset): status = self.status.value - occasion: None | str | Unset if isinstance(self.occasion, Unset): occasion = UNSET @@ -98,13 +84,14 @@ def to_dict(self) -> dict[str, Any]: else: url = self.url - field_dict: dict[str, Any] = {} field_dict.update(self.additional_properties) - field_dict.update({ - "name": name, - "contact_id": contact_id, - }) + field_dict.update( + { + "name": name, + "contact_id": contact_id, + } + ) if description is not UNSET: field_dict["description"] = description if status is not UNSET: @@ -122,8 +109,6 @@ def to_dict(self) -> dict[str, Any]: return field_dict - - @classmethod def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: d = dict(src_dict) @@ -131,9 +116,6 @@ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: contact_id = UUID(d.pop("contact_id")) - - - def _parse_description(data: object) -> None | str | Unset: if data is None: return data @@ -143,17 +125,13 @@ def _parse_description(data: object) -> None | str | Unset: description = _parse_description(d.pop("description", UNSET)) - _status = d.pop("status", UNSET) status: GiftStatus | Unset - if isinstance(_status, Unset): + if isinstance(_status, Unset): status = UNSET else: status = GiftStatus(_status) - - - def _parse_occasion(data: object) -> None | str | Unset: if data is None: return data @@ -163,7 +141,6 @@ def _parse_occasion(data: object) -> None | str | Unset: occasion = _parse_occasion(d.pop("occasion", UNSET)) - def _parse_gift_date(data: object) -> datetime.date | None | Unset: if data is None: return data @@ -174,8 +151,6 @@ def _parse_gift_date(data: object) -> datetime.date | None | Unset: raise TypeError() gift_date_type_0 = isoparse(data).date() - - return gift_date_type_0 except (TypeError, ValueError, AttributeError, KeyError): pass @@ -183,7 +158,6 @@ def _parse_gift_date(data: object) -> datetime.date | None | Unset: gift_date = _parse_gift_date(d.pop("gift_date", UNSET)) - def _parse_value_amount(data: object) -> float | None | Unset: if data is None: return data @@ -193,7 +167,6 @@ def _parse_value_amount(data: object) -> float | None | Unset: value_amount = _parse_value_amount(d.pop("value_amount", UNSET)) - value_currency = d.pop("value_currency", UNSET) def _parse_url(data: object) -> None | str | Unset: @@ -205,7 +178,6 @@ def _parse_url(data: object) -> None | str | Unset: url = _parse_url(d.pop("url", UNSET)) - gift_create = cls( name=name, contact_id=contact_id, @@ -218,7 +190,6 @@ def _parse_url(data: object) -> None | str | Unset: url=url, ) - gift_create.additional_properties = d return gift_create diff --git a/kindred-sdk/personal_crm_client/models/gift_public.py b/kindred-sdk/personal_crm_client/models/gift_public.py index 9611cf4a..c09d3609 100644 --- a/kindred-sdk/personal_crm_client/models/gift_public.py +++ b/kindred-sdk/personal_crm_client/models/gift_public.py @@ -1,45 +1,36 @@ from __future__ import annotations +import datetime from collections.abc import Mapping -from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator +from typing import Any, TypeVar, cast +from uuid import UUID from attrs import define as _attrs_define from attrs import field as _attrs_field - -from ..types import UNSET, Unset +from dateutil.parser import isoparse from ..models.gift_status import GiftStatus from ..types import UNSET, Unset -from dateutil.parser import isoparse -from typing import cast -from uuid import UUID -import datetime - - - - - T = TypeVar("T", bound="GiftPublic") - @_attrs_define class GiftPublic: - """ - Attributes: - name (str): Gift name. - id (UUID): - contact_id (UUID): - created_at (datetime.datetime): - description (None | str | Unset): Details about the gift. - status (GiftStatus | Unset): - occasion (None | str | Unset): Occasion like Birthday, Christmas, Housewarming. - gift_date (datetime.date | None | Unset): When the gift was given or received. - value_amount (float | None | Unset): Monetary cost or value. - value_currency (str | Unset): ISO 4217 currency code. Default: 'USD'. - url (None | str | Unset): Link to the product page (e.g. Amazon). - """ + """ + Attributes: + name (str): Gift name. + id (UUID): + contact_id (UUID): + created_at (datetime.datetime): + description (None | str | Unset): Details about the gift. + status (GiftStatus | Unset): + occasion (None | str | Unset): Occasion like Birthday, Christmas, Housewarming. + gift_date (datetime.date | None | Unset): When the gift was given or received. + value_amount (float | None | Unset): Monetary cost or value. + value_currency (str | Unset): ISO 4217 currency code. Default: 'USD'. + url (None | str | Unset): Link to the product page (e.g. Amazon). + """ name: str id: UUID @@ -50,14 +41,10 @@ class GiftPublic: occasion: None | str | Unset = UNSET gift_date: datetime.date | None | Unset = UNSET value_amount: float | None | Unset = UNSET - value_currency: str | Unset = 'USD' + value_currency: str | Unset = "USD" url: None | str | Unset = UNSET additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) - - - - def to_dict(self) -> dict[str, Any]: name = self.name @@ -77,7 +64,6 @@ def to_dict(self) -> dict[str, Any]: if not isinstance(self.status, Unset): status = self.status.value - occasion: None | str | Unset if isinstance(self.occasion, Unset): occasion = UNSET @@ -106,15 +92,16 @@ def to_dict(self) -> dict[str, Any]: else: url = self.url - field_dict: dict[str, Any] = {} field_dict.update(self.additional_properties) - field_dict.update({ - "name": name, - "id": id, - "contact_id": contact_id, - "created_at": created_at, - }) + field_dict.update( + { + "name": name, + "id": id, + "contact_id": contact_id, + "created_at": created_at, + } + ) if description is not UNSET: field_dict["description"] = description if status is not UNSET: @@ -132,8 +119,6 @@ def to_dict(self) -> dict[str, Any]: return field_dict - - @classmethod def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: d = dict(src_dict) @@ -141,19 +126,10 @@ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: id = UUID(d.pop("id")) - - - contact_id = UUID(d.pop("contact_id")) - - - created_at = isoparse(d.pop("created_at")) - - - def _parse_description(data: object) -> None | str | Unset: if data is None: return data @@ -163,17 +139,13 @@ def _parse_description(data: object) -> None | str | Unset: description = _parse_description(d.pop("description", UNSET)) - _status = d.pop("status", UNSET) status: GiftStatus | Unset - if isinstance(_status, Unset): + if isinstance(_status, Unset): status = UNSET else: status = GiftStatus(_status) - - - def _parse_occasion(data: object) -> None | str | Unset: if data is None: return data @@ -183,7 +155,6 @@ def _parse_occasion(data: object) -> None | str | Unset: occasion = _parse_occasion(d.pop("occasion", UNSET)) - def _parse_gift_date(data: object) -> datetime.date | None | Unset: if data is None: return data @@ -194,8 +165,6 @@ def _parse_gift_date(data: object) -> datetime.date | None | Unset: raise TypeError() gift_date_type_0 = isoparse(data).date() - - return gift_date_type_0 except (TypeError, ValueError, AttributeError, KeyError): pass @@ -203,7 +172,6 @@ def _parse_gift_date(data: object) -> datetime.date | None | Unset: gift_date = _parse_gift_date(d.pop("gift_date", UNSET)) - def _parse_value_amount(data: object) -> float | None | Unset: if data is None: return data @@ -213,7 +181,6 @@ def _parse_value_amount(data: object) -> float | None | Unset: value_amount = _parse_value_amount(d.pop("value_amount", UNSET)) - value_currency = d.pop("value_currency", UNSET) def _parse_url(data: object) -> None | str | Unset: @@ -225,7 +192,6 @@ def _parse_url(data: object) -> None | str | Unset: url = _parse_url(d.pop("url", UNSET)) - gift_public = cls( name=name, id=id, @@ -240,7 +206,6 @@ def _parse_url(data: object) -> None | str | Unset: url=url, ) - gift_public.additional_properties = d return gift_public diff --git a/kindred-sdk/personal_crm_client/models/gift_status.py b/kindred-sdk/personal_crm_client/models/gift_status.py index 584edad5..d38303ac 100644 --- a/kindred-sdk/personal_crm_client/models/gift_status.py +++ b/kindred-sdk/personal_crm_client/models/gift_status.py @@ -1,5 +1,6 @@ from enum import Enum + class GiftStatus(str, Enum): GIVEN = "given" IDEA = "idea" diff --git a/kindred-sdk/personal_crm_client/models/gift_update.py b/kindred-sdk/personal_crm_client/models/gift_update.py index 952b372b..7903aea8 100644 --- a/kindred-sdk/personal_crm_client/models/gift_update.py +++ b/kindred-sdk/personal_crm_client/models/gift_update.py @@ -1,41 +1,32 @@ from __future__ import annotations +import datetime from collections.abc import Mapping -from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator +from typing import Any, TypeVar, cast from attrs import define as _attrs_define from attrs import field as _attrs_field - -from ..types import UNSET, Unset +from dateutil.parser import isoparse from ..models.gift_status import GiftStatus from ..types import UNSET, Unset -from dateutil.parser import isoparse -from typing import cast -import datetime - - - - - T = TypeVar("T", bound="GiftUpdate") - @_attrs_define class GiftUpdate: - """ - Attributes: - name (None | str | Unset): - description (None | str | Unset): - status (GiftStatus | None | Unset): - occasion (None | str | Unset): - gift_date (datetime.date | None | Unset): - value_amount (float | None | Unset): - value_currency (None | str | Unset): - url (None | str | Unset): - """ + """ + Attributes: + name (None | str | Unset): + description (None | str | Unset): + status (GiftStatus | None | Unset): + occasion (None | str | Unset): + gift_date (datetime.date | None | Unset): + value_amount (float | None | Unset): + value_currency (None | str | Unset): + url (None | str | Unset): + """ name: None | str | Unset = UNSET description: None | str | Unset = UNSET @@ -47,10 +38,6 @@ class GiftUpdate: url: None | str | Unset = UNSET additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) - - - - def to_dict(self) -> dict[str, Any]: name: None | str | Unset if isinstance(self.name, Unset): @@ -104,11 +91,9 @@ def to_dict(self) -> dict[str, Any]: else: url = self.url - field_dict: dict[str, Any] = {} field_dict.update(self.additional_properties) - field_dict.update({ - }) + field_dict.update({}) if name is not UNSET: field_dict["name"] = name if description is not UNSET: @@ -128,11 +113,10 @@ def to_dict(self) -> dict[str, Any]: return field_dict - - @classmethod def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: d = dict(src_dict) + def _parse_name(data: object) -> None | str | Unset: if data is None: return data @@ -142,7 +126,6 @@ def _parse_name(data: object) -> None | str | Unset: name = _parse_name(d.pop("name", UNSET)) - def _parse_description(data: object) -> None | str | Unset: if data is None: return data @@ -152,7 +135,6 @@ def _parse_description(data: object) -> None | str | Unset: description = _parse_description(d.pop("description", UNSET)) - def _parse_status(data: object) -> GiftStatus | None | Unset: if data is None: return data @@ -163,8 +145,6 @@ def _parse_status(data: object) -> GiftStatus | None | Unset: raise TypeError() status_type_0 = GiftStatus(data) - - return status_type_0 except (TypeError, ValueError, AttributeError, KeyError): pass @@ -172,7 +152,6 @@ def _parse_status(data: object) -> GiftStatus | None | Unset: status = _parse_status(d.pop("status", UNSET)) - def _parse_occasion(data: object) -> None | str | Unset: if data is None: return data @@ -182,7 +161,6 @@ def _parse_occasion(data: object) -> None | str | Unset: occasion = _parse_occasion(d.pop("occasion", UNSET)) - def _parse_gift_date(data: object) -> datetime.date | None | Unset: if data is None: return data @@ -193,8 +171,6 @@ def _parse_gift_date(data: object) -> datetime.date | None | Unset: raise TypeError() gift_date_type_0 = isoparse(data).date() - - return gift_date_type_0 except (TypeError, ValueError, AttributeError, KeyError): pass @@ -202,7 +178,6 @@ def _parse_gift_date(data: object) -> datetime.date | None | Unset: gift_date = _parse_gift_date(d.pop("gift_date", UNSET)) - def _parse_value_amount(data: object) -> float | None | Unset: if data is None: return data @@ -212,7 +187,6 @@ def _parse_value_amount(data: object) -> float | None | Unset: value_amount = _parse_value_amount(d.pop("value_amount", UNSET)) - def _parse_value_currency(data: object) -> None | str | Unset: if data is None: return data @@ -222,7 +196,6 @@ def _parse_value_currency(data: object) -> None | str | Unset: value_currency = _parse_value_currency(d.pop("value_currency", UNSET)) - def _parse_url(data: object) -> None | str | Unset: if data is None: return data @@ -232,7 +205,6 @@ def _parse_url(data: object) -> None | str | Unset: url = _parse_url(d.pop("url", UNSET)) - gift_update = cls( name=name, description=description, @@ -244,7 +216,6 @@ def _parse_url(data: object) -> None | str | Unset: url=url, ) - gift_update.additional_properties = d return gift_update diff --git a/kindred-sdk/personal_crm_client/models/gifts_public.py b/kindred-sdk/personal_crm_client/models/gifts_public.py index 18efc081..4fa1f06e 100644 --- a/kindred-sdk/personal_crm_client/models/gifts_public.py +++ b/kindred-sdk/personal_crm_client/models/gifts_public.py @@ -1,79 +1,61 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator +from typing import TYPE_CHECKING, Any, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from ..types import UNSET, Unset - -from typing import cast - if TYPE_CHECKING: - from ..models.gift_public import GiftPublic - - - + from ..models.gift_public import GiftPublic T = TypeVar("T", bound="GiftsPublic") - @_attrs_define class GiftsPublic: - """ - Attributes: - data (list[GiftPublic]): - count (int): - """ + """ + Attributes: + data (list[GiftPublic]): + count (int): + """ data: list[GiftPublic] count: int additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) - - - - def to_dict(self) -> dict[str, Any]: - from ..models.gift_public import GiftPublic data = [] for data_item_data in self.data: data_item = data_item_data.to_dict() data.append(data_item) - - count = self.count - field_dict: dict[str, Any] = {} field_dict.update(self.additional_properties) - field_dict.update({ - "data": data, - "count": count, - }) + field_dict.update( + { + "data": data, + "count": count, + } + ) return field_dict - - @classmethod def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: from ..models.gift_public import GiftPublic + d = dict(src_dict) data = [] _data = d.pop("data") - for data_item_data in (_data): + for data_item_data in _data: data_item = GiftPublic.from_dict(data_item_data) - - data.append(data_item) - count = d.pop("count") gifts_public = cls( @@ -81,7 +63,6 @@ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: count=count, ) - gifts_public.additional_properties = d return gifts_public diff --git a/kindred-sdk/personal_crm_client/models/group_create.py b/kindred-sdk/personal_crm_client/models/group_create.py index f2a0021d..c70bd835 100644 --- a/kindred-sdk/personal_crm_client/models/group_create.py +++ b/kindred-sdk/personal_crm_client/models/group_create.py @@ -1,41 +1,28 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator +from typing import Any, TypeVar, cast from attrs import define as _attrs_define from attrs import field as _attrs_field from ..types import UNSET, Unset -from ..types import UNSET, Unset -from typing import cast - - - - - - T = TypeVar("T", bound="GroupCreate") - @_attrs_define class GroupCreate: - """ - Attributes: - name (str): Group name, 1-255 chars. - description (None | str | Unset): Optional group description. - """ + """ + Attributes: + name (str): Group name, 1-255 chars. + description (None | str | Unset): Optional group description. + """ name: str description: None | str | Unset = UNSET additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) - - - - def to_dict(self) -> dict[str, Any]: name = self.name @@ -45,19 +32,18 @@ def to_dict(self) -> dict[str, Any]: else: description = self.description - field_dict: dict[str, Any] = {} field_dict.update(self.additional_properties) - field_dict.update({ - "name": name, - }) + field_dict.update( + { + "name": name, + } + ) if description is not UNSET: field_dict["description"] = description return field_dict - - @classmethod def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: d = dict(src_dict) @@ -72,13 +58,11 @@ def _parse_description(data: object) -> None | str | Unset: description = _parse_description(d.pop("description", UNSET)) - group_create = cls( name=name, description=description, ) - group_create.additional_properties = d return group_create diff --git a/kindred-sdk/personal_crm_client/models/group_public.py b/kindred-sdk/personal_crm_client/models/group_public.py index ee04c6e0..a406d5ff 100644 --- a/kindred-sdk/personal_crm_client/models/group_public.py +++ b/kindred-sdk/personal_crm_client/models/group_public.py @@ -1,37 +1,28 @@ from __future__ import annotations +import datetime from collections.abc import Mapping -from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator +from typing import Any, TypeVar, cast +from uuid import UUID from attrs import define as _attrs_define from attrs import field as _attrs_field - -from ..types import UNSET, Unset - -from ..types import UNSET, Unset from dateutil.parser import isoparse -from typing import cast -from uuid import UUID -import datetime - - - - +from ..types import UNSET, Unset T = TypeVar("T", bound="GroupPublic") - @_attrs_define class GroupPublic: - """ - Attributes: - name (str): Group name, 1-255 chars. - id (UUID): - created_at (datetime.datetime): - description (None | str | Unset): Optional group description. - """ + """ + Attributes: + name (str): Group name, 1-255 chars. + id (UUID): + created_at (datetime.datetime): + description (None | str | Unset): Optional group description. + """ name: str id: UUID @@ -39,10 +30,6 @@ class GroupPublic: description: None | str | Unset = UNSET additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) - - - - def to_dict(self) -> dict[str, Any]: name = self.name @@ -56,21 +43,20 @@ def to_dict(self) -> dict[str, Any]: else: description = self.description - field_dict: dict[str, Any] = {} field_dict.update(self.additional_properties) - field_dict.update({ - "name": name, - "id": id, - "created_at": created_at, - }) + field_dict.update( + { + "name": name, + "id": id, + "created_at": created_at, + } + ) if description is not UNSET: field_dict["description"] = description return field_dict - - @classmethod def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: d = dict(src_dict) @@ -78,14 +64,8 @@ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: id = UUID(d.pop("id")) - - - created_at = isoparse(d.pop("created_at")) - - - def _parse_description(data: object) -> None | str | Unset: if data is None: return data @@ -95,7 +75,6 @@ def _parse_description(data: object) -> None | str | Unset: description = _parse_description(d.pop("description", UNSET)) - group_public = cls( name=name, id=id, @@ -103,7 +82,6 @@ def _parse_description(data: object) -> None | str | Unset: description=description, ) - group_public.additional_properties = d return group_public diff --git a/kindred-sdk/personal_crm_client/models/group_update.py b/kindred-sdk/personal_crm_client/models/group_update.py index 1bb9bbf8..d792b84d 100644 --- a/kindred-sdk/personal_crm_client/models/group_update.py +++ b/kindred-sdk/personal_crm_client/models/group_update.py @@ -1,41 +1,28 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator +from typing import Any, TypeVar, cast from attrs import define as _attrs_define from attrs import field as _attrs_field from ..types import UNSET, Unset -from ..types import UNSET, Unset -from typing import cast - - - - - - T = TypeVar("T", bound="GroupUpdate") - @_attrs_define class GroupUpdate: - """ - Attributes: - name (None | str | Unset): - description (None | str | Unset): - """ + """ + Attributes: + name (None | str | Unset): + description (None | str | Unset): + """ name: None | str | Unset = UNSET description: None | str | Unset = UNSET additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) - - - - def to_dict(self) -> dict[str, Any]: name: None | str | Unset if isinstance(self.name, Unset): @@ -49,11 +36,9 @@ def to_dict(self) -> dict[str, Any]: else: description = self.description - field_dict: dict[str, Any] = {} field_dict.update(self.additional_properties) - field_dict.update({ - }) + field_dict.update({}) if name is not UNSET: field_dict["name"] = name if description is not UNSET: @@ -61,11 +46,10 @@ def to_dict(self) -> dict[str, Any]: return field_dict - - @classmethod def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: d = dict(src_dict) + def _parse_name(data: object) -> None | str | Unset: if data is None: return data @@ -75,7 +59,6 @@ def _parse_name(data: object) -> None | str | Unset: name = _parse_name(d.pop("name", UNSET)) - def _parse_description(data: object) -> None | str | Unset: if data is None: return data @@ -85,13 +68,11 @@ def _parse_description(data: object) -> None | str | Unset: description = _parse_description(d.pop("description", UNSET)) - group_update = cls( name=name, description=description, ) - group_update.additional_properties = d return group_update diff --git a/kindred-sdk/personal_crm_client/models/groups_public.py b/kindred-sdk/personal_crm_client/models/groups_public.py index 01e0f158..fd526800 100644 --- a/kindred-sdk/personal_crm_client/models/groups_public.py +++ b/kindred-sdk/personal_crm_client/models/groups_public.py @@ -1,79 +1,61 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator +from typing import TYPE_CHECKING, Any, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from ..types import UNSET, Unset - -from typing import cast - if TYPE_CHECKING: - from ..models.group_public import GroupPublic - - - + from ..models.group_public import GroupPublic T = TypeVar("T", bound="GroupsPublic") - @_attrs_define class GroupsPublic: - """ - Attributes: - data (list[GroupPublic]): - count (int): - """ + """ + Attributes: + data (list[GroupPublic]): + count (int): + """ data: list[GroupPublic] count: int additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) - - - - def to_dict(self) -> dict[str, Any]: - from ..models.group_public import GroupPublic data = [] for data_item_data in self.data: data_item = data_item_data.to_dict() data.append(data_item) - - count = self.count - field_dict: dict[str, Any] = {} field_dict.update(self.additional_properties) - field_dict.update({ - "data": data, - "count": count, - }) + field_dict.update( + { + "data": data, + "count": count, + } + ) return field_dict - - @classmethod def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: from ..models.group_public import GroupPublic + d = dict(src_dict) data = [] _data = d.pop("data") - for data_item_data in (_data): + for data_item_data in _data: data_item = GroupPublic.from_dict(data_item_data) - - data.append(data_item) - count = d.pop("count") groups_public = cls( @@ -81,7 +63,6 @@ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: count=count, ) - groups_public.additional_properties = d return groups_public diff --git a/kindred-sdk/personal_crm_client/models/http_validation_error.py b/kindred-sdk/personal_crm_client/models/http_validation_error.py index d5231c64..195e5a76 100644 --- a/kindred-sdk/personal_crm_client/models/http_validation_error.py +++ b/kindred-sdk/personal_crm_client/models/http_validation_error.py @@ -1,43 +1,31 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator +from typing import TYPE_CHECKING, Any, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field from ..types import UNSET, Unset -from ..types import UNSET, Unset -from typing import cast - if TYPE_CHECKING: - from ..models.validation_error import ValidationError - - - + from ..models.validation_error import ValidationError T = TypeVar("T", bound="HTTPValidationError") - @_attrs_define class HTTPValidationError: - """ - Attributes: - detail (list[ValidationError] | Unset): - """ + """ + Attributes: + detail (list[ValidationError] | Unset): + """ detail: list[ValidationError] | Unset = UNSET additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) - - - - def to_dict(self) -> dict[str, Any]: - from ..models.validation_error import ValidationError detail: list[dict[str, Any]] | Unset = UNSET if not isinstance(self.detail, Unset): detail = [] @@ -45,23 +33,18 @@ def to_dict(self) -> dict[str, Any]: detail_item = detail_item_data.to_dict() detail.append(detail_item) - - - field_dict: dict[str, Any] = {} field_dict.update(self.additional_properties) - field_dict.update({ - }) + field_dict.update({}) if detail is not UNSET: field_dict["detail"] = detail return field_dict - - @classmethod def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: from ..models.validation_error import ValidationError + d = dict(src_dict) _detail = d.pop("detail", UNSET) detail: list[ValidationError] | Unset = UNSET @@ -70,16 +53,12 @@ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: for detail_item_data in _detail: detail_item = ValidationError.from_dict(detail_item_data) - - detail.append(detail_item) - http_validation_error = cls( detail=detail, ) - http_validation_error.additional_properties = d return http_validation_error diff --git a/kindred-sdk/personal_crm_client/models/interaction_attendee_summary.py b/kindred-sdk/personal_crm_client/models/interaction_attendee_summary.py index 6295fa7b..c3755585 100644 --- a/kindred-sdk/personal_crm_client/models/interaction_attendee_summary.py +++ b/kindred-sdk/personal_crm_client/models/interaction_attendee_summary.py @@ -1,35 +1,26 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator +from typing import Any, TypeVar, cast +from uuid import UUID from attrs import define as _attrs_define from attrs import field as _attrs_field from ..types import UNSET, Unset -from ..types import UNSET, Unset -from typing import cast -from uuid import UUID - - - - - - T = TypeVar("T", bound="InteractionAttendeeSummary") - @_attrs_define class InteractionAttendeeSummary: - """ - Attributes: - id (UUID): - first_name (str): - last_name (None | str | Unset): - avatar_url (None | str | Unset): - """ + """ + Attributes: + id (UUID): + first_name (str): + last_name (None | str | Unset): + avatar_url (None | str | Unset): + """ id: UUID first_name: str @@ -37,10 +28,6 @@ class InteractionAttendeeSummary: avatar_url: None | str | Unset = UNSET additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) - - - - def to_dict(self) -> dict[str, Any]: id = str(self.id) @@ -58,13 +45,14 @@ def to_dict(self) -> dict[str, Any]: else: avatar_url = self.avatar_url - field_dict: dict[str, Any] = {} field_dict.update(self.additional_properties) - field_dict.update({ - "id": id, - "first_name": first_name, - }) + field_dict.update( + { + "id": id, + "first_name": first_name, + } + ) if last_name is not UNSET: field_dict["last_name"] = last_name if avatar_url is not UNSET: @@ -72,16 +60,11 @@ def to_dict(self) -> dict[str, Any]: return field_dict - - @classmethod def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: d = dict(src_dict) id = UUID(d.pop("id")) - - - first_name = d.pop("first_name") def _parse_last_name(data: object) -> None | str | Unset: @@ -93,7 +76,6 @@ def _parse_last_name(data: object) -> None | str | Unset: last_name = _parse_last_name(d.pop("last_name", UNSET)) - def _parse_avatar_url(data: object) -> None | str | Unset: if data is None: return data @@ -103,7 +85,6 @@ def _parse_avatar_url(data: object) -> None | str | Unset: avatar_url = _parse_avatar_url(d.pop("avatar_url", UNSET)) - interaction_attendee_summary = cls( id=id, first_name=first_name, @@ -111,7 +92,6 @@ def _parse_avatar_url(data: object) -> None | str | Unset: avatar_url=avatar_url, ) - interaction_attendee_summary.additional_properties = d return interaction_attendee_summary diff --git a/kindred-sdk/personal_crm_client/models/interaction_channel.py b/kindred-sdk/personal_crm_client/models/interaction_channel.py index ca690898..30bec489 100644 --- a/kindred-sdk/personal_crm_client/models/interaction_channel.py +++ b/kindred-sdk/personal_crm_client/models/interaction_channel.py @@ -1,5 +1,6 @@ from enum import Enum + class InteractionChannel(str, Enum): CALL = "call" EMAIL = "email" diff --git a/kindred-sdk/personal_crm_client/models/interaction_create.py b/kindred-sdk/personal_crm_client/models/interaction_create.py index 36301899..eb4af68f 100644 --- a/kindred-sdk/personal_crm_client/models/interaction_create.py +++ b/kindred-sdk/personal_crm_client/models/interaction_create.py @@ -1,40 +1,31 @@ from __future__ import annotations +import datetime from collections.abc import Mapping -from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator +from typing import Any, TypeVar, cast +from uuid import UUID from attrs import define as _attrs_define from attrs import field as _attrs_field - -from ..types import UNSET, Unset +from dateutil.parser import isoparse from ..models.interaction_channel import InteractionChannel from ..types import UNSET, Unset -from dateutil.parser import isoparse -from typing import cast -from uuid import UUID -import datetime - - - - - T = TypeVar("T", bound="InteractionCreate") - @_attrs_define class InteractionCreate: - """ - Attributes: - channel (InteractionChannel): - occurred_at (datetime.datetime): When the interaction actually took place. - attendee_ids (list[UUID]): Contacts that attended; must have at least one. - notes (None | str | Unset): Conversation summary, action items, etc. - mood (None | str | Unset): Emoji or keyword capturing the tone. - duration_minutes (int | None | Unset): Length of the interaction in minutes. - """ + """ + Attributes: + channel (InteractionChannel): + occurred_at (datetime.datetime): When the interaction actually took place. + attendee_ids (list[UUID]): Contacts that attended; must have at least one. + notes (None | str | Unset): Conversation summary, action items, etc. + mood (None | str | Unset): Emoji or keyword capturing the tone. + duration_minutes (int | None | Unset): Length of the interaction in minutes. + """ channel: InteractionChannel occurred_at: datetime.datetime @@ -44,10 +35,6 @@ class InteractionCreate: duration_minutes: int | None | Unset = UNSET additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) - - - - def to_dict(self) -> dict[str, Any]: channel = self.channel.value @@ -58,8 +45,6 @@ def to_dict(self) -> dict[str, Any]: attendee_ids_item = str(attendee_ids_item_data) attendee_ids.append(attendee_ids_item) - - notes: None | str | Unset if isinstance(self.notes, Unset): notes = UNSET @@ -78,14 +63,15 @@ def to_dict(self) -> dict[str, Any]: else: duration_minutes = self.duration_minutes - field_dict: dict[str, Any] = {} field_dict.update(self.additional_properties) - field_dict.update({ - "channel": channel, - "occurred_at": occurred_at, - "attendee_ids": attendee_ids, - }) + field_dict.update( + { + "channel": channel, + "occurred_at": occurred_at, + "attendee_ids": attendee_ids, + } + ) if notes is not UNSET: field_dict["notes"] = notes if mood is not UNSET: @@ -95,31 +81,20 @@ def to_dict(self) -> dict[str, Any]: return field_dict - - @classmethod def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: d = dict(src_dict) channel = InteractionChannel(d.pop("channel")) - - - occurred_at = isoparse(d.pop("occurred_at")) - - - attendee_ids = [] _attendee_ids = d.pop("attendee_ids") - for attendee_ids_item_data in (_attendee_ids): + for attendee_ids_item_data in _attendee_ids: attendee_ids_item = UUID(attendee_ids_item_data) - - attendee_ids.append(attendee_ids_item) - def _parse_notes(data: object) -> None | str | Unset: if data is None: return data @@ -129,7 +104,6 @@ def _parse_notes(data: object) -> None | str | Unset: notes = _parse_notes(d.pop("notes", UNSET)) - def _parse_mood(data: object) -> None | str | Unset: if data is None: return data @@ -139,7 +113,6 @@ def _parse_mood(data: object) -> None | str | Unset: mood = _parse_mood(d.pop("mood", UNSET)) - def _parse_duration_minutes(data: object) -> int | None | Unset: if data is None: return data @@ -149,7 +122,6 @@ def _parse_duration_minutes(data: object) -> int | None | Unset: duration_minutes = _parse_duration_minutes(d.pop("duration_minutes", UNSET)) - interaction_create = cls( channel=channel, occurred_at=occurred_at, @@ -159,7 +131,6 @@ def _parse_duration_minutes(data: object) -> int | None | Unset: duration_minutes=duration_minutes, ) - interaction_create.additional_properties = d return interaction_create diff --git a/kindred-sdk/personal_crm_client/models/interaction_public.py b/kindred-sdk/personal_crm_client/models/interaction_public.py index 5a7e2856..c7ced678 100644 --- a/kindred-sdk/personal_crm_client/models/interaction_public.py +++ b/kindred-sdk/personal_crm_client/models/interaction_public.py @@ -1,44 +1,37 @@ from __future__ import annotations +import datetime from collections.abc import Mapping -from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator +from typing import TYPE_CHECKING, Any, TypeVar, cast +from uuid import UUID from attrs import define as _attrs_define from attrs import field as _attrs_field - -from ..types import UNSET, Unset +from dateutil.parser import isoparse from ..models.interaction_channel import InteractionChannel from ..types import UNSET, Unset -from dateutil.parser import isoparse -from typing import cast -from uuid import UUID -import datetime if TYPE_CHECKING: - from ..models.interaction_attendee_summary import InteractionAttendeeSummary - - - + from ..models.interaction_attendee_summary import InteractionAttendeeSummary T = TypeVar("T", bound="InteractionPublic") - @_attrs_define class InteractionPublic: - """ - Attributes: - channel (InteractionChannel): - occurred_at (datetime.datetime): When the interaction actually took place. - id (UUID): - created_at (datetime.datetime): - notes (None | str | Unset): Conversation summary, action items, etc. - mood (None | str | Unset): Emoji or keyword capturing the tone. - duration_minutes (int | None | Unset): Length of the interaction in minutes. - attendees (list[InteractionAttendeeSummary] | Unset): - """ + """ + Attributes: + channel (InteractionChannel): + occurred_at (datetime.datetime): When the interaction actually took place. + id (UUID): + created_at (datetime.datetime): + notes (None | str | Unset): Conversation summary, action items, etc. + mood (None | str | Unset): Emoji or keyword capturing the tone. + duration_minutes (int | None | Unset): Length of the interaction in minutes. + attendees (list[InteractionAttendeeSummary] | Unset): + """ channel: InteractionChannel occurred_at: datetime.datetime @@ -50,12 +43,7 @@ class InteractionPublic: attendees: list[InteractionAttendeeSummary] | Unset = UNSET additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) - - - - def to_dict(self) -> dict[str, Any]: - from ..models.interaction_attendee_summary import InteractionAttendeeSummary channel = self.channel.value occurred_at = self.occurred_at.isoformat() @@ -89,17 +77,16 @@ def to_dict(self) -> dict[str, Any]: attendees_item = attendees_item_data.to_dict() attendees.append(attendees_item) - - - field_dict: dict[str, Any] = {} field_dict.update(self.additional_properties) - field_dict.update({ - "channel": channel, - "occurred_at": occurred_at, - "id": id, - "created_at": created_at, - }) + field_dict.update( + { + "channel": channel, + "occurred_at": occurred_at, + "id": id, + "created_at": created_at, + } + ) if notes is not UNSET: field_dict["notes"] = notes if mood is not UNSET: @@ -111,32 +98,19 @@ def to_dict(self) -> dict[str, Any]: return field_dict - - @classmethod def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: from ..models.interaction_attendee_summary import InteractionAttendeeSummary + d = dict(src_dict) channel = InteractionChannel(d.pop("channel")) - - - occurred_at = isoparse(d.pop("occurred_at")) - - - id = UUID(d.pop("id")) - - - created_at = isoparse(d.pop("created_at")) - - - def _parse_notes(data: object) -> None | str | Unset: if data is None: return data @@ -146,7 +120,6 @@ def _parse_notes(data: object) -> None | str | Unset: notes = _parse_notes(d.pop("notes", UNSET)) - def _parse_mood(data: object) -> None | str | Unset: if data is None: return data @@ -156,7 +129,6 @@ def _parse_mood(data: object) -> None | str | Unset: mood = _parse_mood(d.pop("mood", UNSET)) - def _parse_duration_minutes(data: object) -> int | None | Unset: if data is None: return data @@ -166,7 +138,6 @@ def _parse_duration_minutes(data: object) -> int | None | Unset: duration_minutes = _parse_duration_minutes(d.pop("duration_minutes", UNSET)) - _attendees = d.pop("attendees", UNSET) attendees: list[InteractionAttendeeSummary] | Unset = UNSET if _attendees is not UNSET: @@ -174,11 +145,8 @@ def _parse_duration_minutes(data: object) -> int | None | Unset: for attendees_item_data in _attendees: attendees_item = InteractionAttendeeSummary.from_dict(attendees_item_data) - - attendees.append(attendees_item) - interaction_public = cls( channel=channel, occurred_at=occurred_at, @@ -190,7 +158,6 @@ def _parse_duration_minutes(data: object) -> int | None | Unset: attendees=attendees, ) - interaction_public.additional_properties = d return interaction_public diff --git a/kindred-sdk/personal_crm_client/models/interaction_update.py b/kindred-sdk/personal_crm_client/models/interaction_update.py index 0370e27f..d234487d 100644 --- a/kindred-sdk/personal_crm_client/models/interaction_update.py +++ b/kindred-sdk/personal_crm_client/models/interaction_update.py @@ -1,40 +1,31 @@ from __future__ import annotations +import datetime from collections.abc import Mapping -from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator +from typing import Any, TypeVar, cast +from uuid import UUID from attrs import define as _attrs_define from attrs import field as _attrs_field - -from ..types import UNSET, Unset +from dateutil.parser import isoparse from ..models.interaction_channel import InteractionChannel from ..types import UNSET, Unset -from dateutil.parser import isoparse -from typing import cast -from uuid import UUID -import datetime - - - - - T = TypeVar("T", bound="InteractionUpdate") - @_attrs_define class InteractionUpdate: - """ - Attributes: - channel (InteractionChannel | None | Unset): - occurred_at (datetime.datetime | None | Unset): - notes (None | str | Unset): - mood (None | str | Unset): - duration_minutes (int | None | Unset): - attendee_ids (list[UUID] | None | Unset): Replace the attendee set; must have at least one if provided. - """ + """ + Attributes: + channel (InteractionChannel | None | Unset): + occurred_at (datetime.datetime | None | Unset): + notes (None | str | Unset): + mood (None | str | Unset): + duration_minutes (int | None | Unset): + attendee_ids (list[UUID] | None | Unset): Replace the attendee set; must have at least one if provided. + """ channel: InteractionChannel | None | Unset = UNSET occurred_at: datetime.datetime | None | Unset = UNSET @@ -44,10 +35,6 @@ class InteractionUpdate: attendee_ids: list[UUID] | None | Unset = UNSET additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) - - - - def to_dict(self) -> dict[str, Any]: channel: None | str | Unset if isinstance(self.channel, Unset): @@ -92,15 +79,12 @@ def to_dict(self) -> dict[str, Any]: attendee_ids_type_0_item = str(attendee_ids_type_0_item_data) attendee_ids.append(attendee_ids_type_0_item) - else: attendee_ids = self.attendee_ids - field_dict: dict[str, Any] = {} field_dict.update(self.additional_properties) - field_dict.update({ - }) + field_dict.update({}) if channel is not UNSET: field_dict["channel"] = channel if occurred_at is not UNSET: @@ -116,11 +100,10 @@ def to_dict(self) -> dict[str, Any]: return field_dict - - @classmethod def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: d = dict(src_dict) + def _parse_channel(data: object) -> InteractionChannel | None | Unset: if data is None: return data @@ -131,8 +114,6 @@ def _parse_channel(data: object) -> InteractionChannel | None | Unset: raise TypeError() channel_type_0 = InteractionChannel(data) - - return channel_type_0 except (TypeError, ValueError, AttributeError, KeyError): pass @@ -140,7 +121,6 @@ def _parse_channel(data: object) -> InteractionChannel | None | Unset: channel = _parse_channel(d.pop("channel", UNSET)) - def _parse_occurred_at(data: object) -> datetime.datetime | None | Unset: if data is None: return data @@ -151,8 +131,6 @@ def _parse_occurred_at(data: object) -> datetime.datetime | None | Unset: raise TypeError() occurred_at_type_0 = isoparse(data) - - return occurred_at_type_0 except (TypeError, ValueError, AttributeError, KeyError): pass @@ -160,7 +138,6 @@ def _parse_occurred_at(data: object) -> datetime.datetime | None | Unset: occurred_at = _parse_occurred_at(d.pop("occurred_at", UNSET)) - def _parse_notes(data: object) -> None | str | Unset: if data is None: return data @@ -170,7 +147,6 @@ def _parse_notes(data: object) -> None | str | Unset: notes = _parse_notes(d.pop("notes", UNSET)) - def _parse_mood(data: object) -> None | str | Unset: if data is None: return data @@ -180,7 +156,6 @@ def _parse_mood(data: object) -> None | str | Unset: mood = _parse_mood(d.pop("mood", UNSET)) - def _parse_duration_minutes(data: object) -> int | None | Unset: if data is None: return data @@ -190,7 +165,6 @@ def _parse_duration_minutes(data: object) -> int | None | Unset: duration_minutes = _parse_duration_minutes(d.pop("duration_minutes", UNSET)) - def _parse_attendee_ids(data: object) -> list[UUID] | None | Unset: if data is None: return data @@ -201,11 +175,9 @@ def _parse_attendee_ids(data: object) -> list[UUID] | None | Unset: raise TypeError() attendee_ids_type_0 = [] _attendee_ids_type_0 = data - for attendee_ids_type_0_item_data in (_attendee_ids_type_0): + for attendee_ids_type_0_item_data in _attendee_ids_type_0: attendee_ids_type_0_item = UUID(attendee_ids_type_0_item_data) - - attendee_ids_type_0.append(attendee_ids_type_0_item) return attendee_ids_type_0 @@ -215,7 +187,6 @@ def _parse_attendee_ids(data: object) -> list[UUID] | None | Unset: attendee_ids = _parse_attendee_ids(d.pop("attendee_ids", UNSET)) - interaction_update = cls( channel=channel, occurred_at=occurred_at, @@ -225,7 +196,6 @@ def _parse_attendee_ids(data: object) -> list[UUID] | None | Unset: attendee_ids=attendee_ids, ) - interaction_update.additional_properties = d return interaction_update diff --git a/kindred-sdk/personal_crm_client/models/interactions_public.py b/kindred-sdk/personal_crm_client/models/interactions_public.py index bc9d4abc..87281bec 100644 --- a/kindred-sdk/personal_crm_client/models/interactions_public.py +++ b/kindred-sdk/personal_crm_client/models/interactions_public.py @@ -1,79 +1,61 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator +from typing import TYPE_CHECKING, Any, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from ..types import UNSET, Unset - -from typing import cast - if TYPE_CHECKING: - from ..models.interaction_public import InteractionPublic - - - + from ..models.interaction_public import InteractionPublic T = TypeVar("T", bound="InteractionsPublic") - @_attrs_define class InteractionsPublic: - """ - Attributes: - data (list[InteractionPublic]): - count (int): - """ + """ + Attributes: + data (list[InteractionPublic]): + count (int): + """ data: list[InteractionPublic] count: int additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) - - - - def to_dict(self) -> dict[str, Any]: - from ..models.interaction_public import InteractionPublic data = [] for data_item_data in self.data: data_item = data_item_data.to_dict() data.append(data_item) - - count = self.count - field_dict: dict[str, Any] = {} field_dict.update(self.additional_properties) - field_dict.update({ - "data": data, - "count": count, - }) + field_dict.update( + { + "data": data, + "count": count, + } + ) return field_dict - - @classmethod def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: from ..models.interaction_public import InteractionPublic + d = dict(src_dict) data = [] _data = d.pop("data") - for data_item_data in (_data): + for data_item_data in _data: data_item = InteractionPublic.from_dict(data_item_data) - - data.append(data_item) - count = d.pop("count") interactions_public = cls( @@ -81,7 +63,6 @@ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: count=count, ) - interactions_public.additional_properties = d return interactions_public diff --git a/kindred-sdk/personal_crm_client/models/journal_entries_public.py b/kindred-sdk/personal_crm_client/models/journal_entries_public.py index 11a9459c..9c9464e4 100644 --- a/kindred-sdk/personal_crm_client/models/journal_entries_public.py +++ b/kindred-sdk/personal_crm_client/models/journal_entries_public.py @@ -1,79 +1,61 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator +from typing import TYPE_CHECKING, Any, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from ..types import UNSET, Unset - -from typing import cast - if TYPE_CHECKING: - from ..models.journal_entry_public import JournalEntryPublic - - - + from ..models.journal_entry_public import JournalEntryPublic T = TypeVar("T", bound="JournalEntriesPublic") - @_attrs_define class JournalEntriesPublic: - """ - Attributes: - data (list[JournalEntryPublic]): - count (int): - """ + """ + Attributes: + data (list[JournalEntryPublic]): + count (int): + """ data: list[JournalEntryPublic] count: int additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) - - - - def to_dict(self) -> dict[str, Any]: - from ..models.journal_entry_public import JournalEntryPublic data = [] for data_item_data in self.data: data_item = data_item_data.to_dict() data.append(data_item) - - count = self.count - field_dict: dict[str, Any] = {} field_dict.update(self.additional_properties) - field_dict.update({ - "data": data, - "count": count, - }) + field_dict.update( + { + "data": data, + "count": count, + } + ) return field_dict - - @classmethod def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: from ..models.journal_entry_public import JournalEntryPublic + d = dict(src_dict) data = [] _data = d.pop("data") - for data_item_data in (_data): + for data_item_data in _data: data_item = JournalEntryPublic.from_dict(data_item_data) - - data.append(data_item) - count = d.pop("count") journal_entries_public = cls( @@ -81,7 +63,6 @@ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: count=count, ) - journal_entries_public.additional_properties = d return journal_entries_public diff --git a/kindred-sdk/personal_crm_client/models/journal_entry_create.py b/kindred-sdk/personal_crm_client/models/journal_entry_create.py index 12c5c74e..692becb5 100644 --- a/kindred-sdk/personal_crm_client/models/journal_entry_create.py +++ b/kindred-sdk/personal_crm_client/models/journal_entry_create.py @@ -1,45 +1,32 @@ from __future__ import annotations +import datetime from collections.abc import Mapping -from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator +from typing import Any, TypeVar, cast from attrs import define as _attrs_define from attrs import field as _attrs_field - -from ..types import UNSET, Unset - -from ..types import UNSET, Unset from dateutil.parser import isoparse -from typing import cast -import datetime - - - - +from ..types import UNSET, Unset T = TypeVar("T", bound="JournalEntryCreate") - @_attrs_define class JournalEntryCreate: - """ - Attributes: - body (str): Entry body, 1-50000 chars. - entry_date (datetime.date): Date the entry is about (may differ from created_at). - mood (None | str | Unset): Emoji or keyword capturing the mood. - """ + """ + Attributes: + body (str): Entry body, 1-50000 chars. + entry_date (datetime.date): Date the entry is about (may differ from created_at). + mood (None | str | Unset): Emoji or keyword capturing the mood. + """ body: str entry_date: datetime.date mood: None | str | Unset = UNSET additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) - - - - def to_dict(self) -> dict[str, Any]: body = self.body @@ -51,20 +38,19 @@ def to_dict(self) -> dict[str, Any]: else: mood = self.mood - field_dict: dict[str, Any] = {} field_dict.update(self.additional_properties) - field_dict.update({ - "body": body, - "entry_date": entry_date, - }) + field_dict.update( + { + "body": body, + "entry_date": entry_date, + } + ) if mood is not UNSET: field_dict["mood"] = mood return field_dict - - @classmethod def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: d = dict(src_dict) @@ -72,9 +58,6 @@ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: entry_date = isoparse(d.pop("entry_date")).date() - - - def _parse_mood(data: object) -> None | str | Unset: if data is None: return data @@ -84,14 +67,12 @@ def _parse_mood(data: object) -> None | str | Unset: mood = _parse_mood(d.pop("mood", UNSET)) - journal_entry_create = cls( body=body, entry_date=entry_date, mood=mood, ) - journal_entry_create.additional_properties = d return journal_entry_create diff --git a/kindred-sdk/personal_crm_client/models/journal_entry_public.py b/kindred-sdk/personal_crm_client/models/journal_entry_public.py index 8b10fc90..28acfbc1 100644 --- a/kindred-sdk/personal_crm_client/models/journal_entry_public.py +++ b/kindred-sdk/personal_crm_client/models/journal_entry_public.py @@ -1,39 +1,30 @@ from __future__ import annotations +import datetime from collections.abc import Mapping -from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator +from typing import Any, TypeVar, cast +from uuid import UUID from attrs import define as _attrs_define from attrs import field as _attrs_field - -from ..types import UNSET, Unset - -from ..types import UNSET, Unset from dateutil.parser import isoparse -from typing import cast -from uuid import UUID -import datetime - - - - +from ..types import UNSET, Unset T = TypeVar("T", bound="JournalEntryPublic") - @_attrs_define class JournalEntryPublic: - """ - Attributes: - body (str): Entry body, 1-50000 chars. - entry_date (datetime.date): Date the entry is about (may differ from created_at). - id (UUID): - created_at (datetime.datetime): - updated_at (datetime.datetime): - mood (None | str | Unset): Emoji or keyword capturing the mood. - """ + """ + Attributes: + body (str): Entry body, 1-50000 chars. + entry_date (datetime.date): Date the entry is about (may differ from created_at). + id (UUID): + created_at (datetime.datetime): + updated_at (datetime.datetime): + mood (None | str | Unset): Emoji or keyword capturing the mood. + """ body: str entry_date: datetime.date @@ -43,10 +34,6 @@ class JournalEntryPublic: mood: None | str | Unset = UNSET additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) - - - - def to_dict(self) -> dict[str, Any]: body = self.body @@ -64,23 +51,22 @@ def to_dict(self) -> dict[str, Any]: else: mood = self.mood - field_dict: dict[str, Any] = {} field_dict.update(self.additional_properties) - field_dict.update({ - "body": body, - "entry_date": entry_date, - "id": id, - "created_at": created_at, - "updated_at": updated_at, - }) + field_dict.update( + { + "body": body, + "entry_date": entry_date, + "id": id, + "created_at": created_at, + "updated_at": updated_at, + } + ) if mood is not UNSET: field_dict["mood"] = mood return field_dict - - @classmethod def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: d = dict(src_dict) @@ -88,24 +74,12 @@ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: entry_date = isoparse(d.pop("entry_date")).date() - - - id = UUID(d.pop("id")) - - - created_at = isoparse(d.pop("created_at")) - - - updated_at = isoparse(d.pop("updated_at")) - - - def _parse_mood(data: object) -> None | str | Unset: if data is None: return data @@ -115,7 +89,6 @@ def _parse_mood(data: object) -> None | str | Unset: mood = _parse_mood(d.pop("mood", UNSET)) - journal_entry_public = cls( body=body, entry_date=entry_date, @@ -125,7 +98,6 @@ def _parse_mood(data: object) -> None | str | Unset: mood=mood, ) - journal_entry_public.additional_properties = d return journal_entry_public diff --git a/kindred-sdk/personal_crm_client/models/journal_entry_update.py b/kindred-sdk/personal_crm_client/models/journal_entry_update.py index 455c4473..26e7bb22 100644 --- a/kindred-sdk/personal_crm_client/models/journal_entry_update.py +++ b/kindred-sdk/personal_crm_client/models/journal_entry_update.py @@ -1,45 +1,32 @@ from __future__ import annotations +import datetime from collections.abc import Mapping -from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator +from typing import Any, TypeVar, cast from attrs import define as _attrs_define from attrs import field as _attrs_field - -from ..types import UNSET, Unset - -from ..types import UNSET, Unset from dateutil.parser import isoparse -from typing import cast -import datetime - - - - +from ..types import UNSET, Unset T = TypeVar("T", bound="JournalEntryUpdate") - @_attrs_define class JournalEntryUpdate: - """ - Attributes: - body (None | str | Unset): - mood (None | str | Unset): - entry_date (datetime.date | None | Unset): - """ + """ + Attributes: + body (None | str | Unset): + mood (None | str | Unset): + entry_date (datetime.date | None | Unset): + """ body: None | str | Unset = UNSET mood: None | str | Unset = UNSET entry_date: datetime.date | None | Unset = UNSET additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) - - - - def to_dict(self) -> dict[str, Any]: body: None | str | Unset if isinstance(self.body, Unset): @@ -61,11 +48,9 @@ def to_dict(self) -> dict[str, Any]: else: entry_date = self.entry_date - field_dict: dict[str, Any] = {} field_dict.update(self.additional_properties) - field_dict.update({ - }) + field_dict.update({}) if body is not UNSET: field_dict["body"] = body if mood is not UNSET: @@ -75,11 +60,10 @@ def to_dict(self) -> dict[str, Any]: return field_dict - - @classmethod def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: d = dict(src_dict) + def _parse_body(data: object) -> None | str | Unset: if data is None: return data @@ -89,7 +73,6 @@ def _parse_body(data: object) -> None | str | Unset: body = _parse_body(d.pop("body", UNSET)) - def _parse_mood(data: object) -> None | str | Unset: if data is None: return data @@ -99,7 +82,6 @@ def _parse_mood(data: object) -> None | str | Unset: mood = _parse_mood(d.pop("mood", UNSET)) - def _parse_entry_date(data: object) -> datetime.date | None | Unset: if data is None: return data @@ -110,8 +92,6 @@ def _parse_entry_date(data: object) -> datetime.date | None | Unset: raise TypeError() entry_date_type_0 = isoparse(data).date() - - return entry_date_type_0 except (TypeError, ValueError, AttributeError, KeyError): pass @@ -119,14 +99,12 @@ def _parse_entry_date(data: object) -> datetime.date | None | Unset: entry_date = _parse_entry_date(d.pop("entry_date", UNSET)) - journal_entry_update = cls( body=body, mood=mood, entry_date=entry_date, ) - journal_entry_update.additional_properties = d return journal_entry_update diff --git a/kindred-sdk/personal_crm_client/models/life_event_create.py b/kindred-sdk/personal_crm_client/models/life_event_create.py index b0894c5c..c64fcadd 100644 --- a/kindred-sdk/personal_crm_client/models/life_event_create.py +++ b/kindred-sdk/personal_crm_client/models/life_event_create.py @@ -1,40 +1,31 @@ from __future__ import annotations +import datetime from collections.abc import Mapping -from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator +from typing import Any, TypeVar, cast +from uuid import UUID from attrs import define as _attrs_define from attrs import field as _attrs_field - -from ..types import UNSET, Unset - -from ..types import UNSET, Unset from dateutil.parser import isoparse -from typing import cast -from uuid import UUID -import datetime - - - - +from ..types import UNSET, Unset T = TypeVar("T", bound="LifeEventCreate") - @_attrs_define class LifeEventCreate: - """ - Attributes: - event_type (str): Kind of milestone: job_change, move, wedding, baby, graduation, birthday, anniversary, etc. - title (str): Event title. - occurred_at (datetime.date): Date the event happened. - contact_id (UUID): - description (None | str | Unset): Extra details about the event. - create_annual_reminder (bool | Unset): If true, auto-create a yearly recurring reminder on this date. Default: - False. - """ + """ + Attributes: + event_type (str): Kind of milestone: job_change, move, wedding, baby, graduation, birthday, anniversary, etc. + title (str): Event title. + occurred_at (datetime.date): Date the event happened. + contact_id (UUID): + description (None | str | Unset): Extra details about the event. + create_annual_reminder (bool | Unset): If true, auto-create a yearly recurring reminder on this date. Default: + False. + """ event_type: str title: str @@ -44,10 +35,6 @@ class LifeEventCreate: create_annual_reminder: bool | Unset = False additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) - - - - def to_dict(self) -> dict[str, Any]: event_type = self.event_type @@ -65,15 +52,16 @@ def to_dict(self) -> dict[str, Any]: create_annual_reminder = self.create_annual_reminder - field_dict: dict[str, Any] = {} field_dict.update(self.additional_properties) - field_dict.update({ - "event_type": event_type, - "title": title, - "occurred_at": occurred_at, - "contact_id": contact_id, - }) + field_dict.update( + { + "event_type": event_type, + "title": title, + "occurred_at": occurred_at, + "contact_id": contact_id, + } + ) if description is not UNSET: field_dict["description"] = description if create_annual_reminder is not UNSET: @@ -81,8 +69,6 @@ def to_dict(self) -> dict[str, Any]: return field_dict - - @classmethod def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: d = dict(src_dict) @@ -92,14 +78,8 @@ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: occurred_at = isoparse(d.pop("occurred_at")).date() - - - contact_id = UUID(d.pop("contact_id")) - - - def _parse_description(data: object) -> None | str | Unset: if data is None: return data @@ -109,7 +89,6 @@ def _parse_description(data: object) -> None | str | Unset: description = _parse_description(d.pop("description", UNSET)) - create_annual_reminder = d.pop("create_annual_reminder", UNSET) life_event_create = cls( @@ -121,7 +100,6 @@ def _parse_description(data: object) -> None | str | Unset: create_annual_reminder=create_annual_reminder, ) - life_event_create.additional_properties = d return life_event_create diff --git a/kindred-sdk/personal_crm_client/models/life_event_public.py b/kindred-sdk/personal_crm_client/models/life_event_public.py index 18b0b173..cb0d6b5a 100644 --- a/kindred-sdk/personal_crm_client/models/life_event_public.py +++ b/kindred-sdk/personal_crm_client/models/life_event_public.py @@ -1,42 +1,33 @@ from __future__ import annotations +import datetime from collections.abc import Mapping -from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator +from typing import Any, TypeVar, cast +from uuid import UUID from attrs import define as _attrs_define from attrs import field as _attrs_field - -from ..types import UNSET, Unset - -from ..types import UNSET, Unset from dateutil.parser import isoparse -from typing import cast -from uuid import UUID -import datetime - - - - +from ..types import UNSET, Unset T = TypeVar("T", bound="LifeEventPublic") - @_attrs_define class LifeEventPublic: - """ - Attributes: - event_type (str): Kind of milestone: job_change, move, wedding, baby, graduation, birthday, anniversary, etc. - title (str): Event title. - occurred_at (datetime.date): Date the event happened. - id (UUID): - contact_id (UUID): - created_at (datetime.datetime): - description (None | str | Unset): Extra details about the event. - create_annual_reminder (bool | Unset): If true, auto-create a yearly recurring reminder on this date. Default: - False. - """ + """ + Attributes: + event_type (str): Kind of milestone: job_change, move, wedding, baby, graduation, birthday, anniversary, etc. + title (str): Event title. + occurred_at (datetime.date): Date the event happened. + id (UUID): + contact_id (UUID): + created_at (datetime.datetime): + description (None | str | Unset): Extra details about the event. + create_annual_reminder (bool | Unset): If true, auto-create a yearly recurring reminder on this date. Default: + False. + """ event_type: str title: str @@ -48,10 +39,6 @@ class LifeEventPublic: create_annual_reminder: bool | Unset = False additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) - - - - def to_dict(self) -> dict[str, Any]: event_type = self.event_type @@ -73,17 +60,18 @@ def to_dict(self) -> dict[str, Any]: create_annual_reminder = self.create_annual_reminder - field_dict: dict[str, Any] = {} field_dict.update(self.additional_properties) - field_dict.update({ - "event_type": event_type, - "title": title, - "occurred_at": occurred_at, - "id": id, - "contact_id": contact_id, - "created_at": created_at, - }) + field_dict.update( + { + "event_type": event_type, + "title": title, + "occurred_at": occurred_at, + "id": id, + "contact_id": contact_id, + "created_at": created_at, + } + ) if description is not UNSET: field_dict["description"] = description if create_annual_reminder is not UNSET: @@ -91,8 +79,6 @@ def to_dict(self) -> dict[str, Any]: return field_dict - - @classmethod def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: d = dict(src_dict) @@ -102,24 +88,12 @@ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: occurred_at = isoparse(d.pop("occurred_at")).date() - - - id = UUID(d.pop("id")) - - - contact_id = UUID(d.pop("contact_id")) - - - created_at = isoparse(d.pop("created_at")) - - - def _parse_description(data: object) -> None | str | Unset: if data is None: return data @@ -129,7 +103,6 @@ def _parse_description(data: object) -> None | str | Unset: description = _parse_description(d.pop("description", UNSET)) - create_annual_reminder = d.pop("create_annual_reminder", UNSET) life_event_public = cls( @@ -143,7 +116,6 @@ def _parse_description(data: object) -> None | str | Unset: create_annual_reminder=create_annual_reminder, ) - life_event_public.additional_properties = d return life_event_public diff --git a/kindred-sdk/personal_crm_client/models/life_event_update.py b/kindred-sdk/personal_crm_client/models/life_event_update.py index dd5299f6..32506039 100644 --- a/kindred-sdk/personal_crm_client/models/life_event_update.py +++ b/kindred-sdk/personal_crm_client/models/life_event_update.py @@ -1,37 +1,28 @@ from __future__ import annotations +import datetime from collections.abc import Mapping -from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator +from typing import Any, TypeVar, cast from attrs import define as _attrs_define from attrs import field as _attrs_field - -from ..types import UNSET, Unset - -from ..types import UNSET, Unset from dateutil.parser import isoparse -from typing import cast -import datetime - - - - +from ..types import UNSET, Unset T = TypeVar("T", bound="LifeEventUpdate") - @_attrs_define class LifeEventUpdate: - """ - Attributes: - event_type (None | str | Unset): - title (None | str | Unset): - description (None | str | Unset): - occurred_at (datetime.date | None | Unset): - create_annual_reminder (bool | None | Unset): - """ + """ + Attributes: + event_type (None | str | Unset): + title (None | str | Unset): + description (None | str | Unset): + occurred_at (datetime.date | None | Unset): + create_annual_reminder (bool | None | Unset): + """ event_type: None | str | Unset = UNSET title: None | str | Unset = UNSET @@ -40,10 +31,6 @@ class LifeEventUpdate: create_annual_reminder: bool | None | Unset = UNSET additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) - - - - def to_dict(self) -> dict[str, Any]: event_type: None | str | Unset if isinstance(self.event_type, Unset): @@ -77,11 +64,9 @@ def to_dict(self) -> dict[str, Any]: else: create_annual_reminder = self.create_annual_reminder - field_dict: dict[str, Any] = {} field_dict.update(self.additional_properties) - field_dict.update({ - }) + field_dict.update({}) if event_type is not UNSET: field_dict["event_type"] = event_type if title is not UNSET: @@ -95,11 +80,10 @@ def to_dict(self) -> dict[str, Any]: return field_dict - - @classmethod def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: d = dict(src_dict) + def _parse_event_type(data: object) -> None | str | Unset: if data is None: return data @@ -109,7 +93,6 @@ def _parse_event_type(data: object) -> None | str | Unset: event_type = _parse_event_type(d.pop("event_type", UNSET)) - def _parse_title(data: object) -> None | str | Unset: if data is None: return data @@ -119,7 +102,6 @@ def _parse_title(data: object) -> None | str | Unset: title = _parse_title(d.pop("title", UNSET)) - def _parse_description(data: object) -> None | str | Unset: if data is None: return data @@ -129,7 +111,6 @@ def _parse_description(data: object) -> None | str | Unset: description = _parse_description(d.pop("description", UNSET)) - def _parse_occurred_at(data: object) -> datetime.date | None | Unset: if data is None: return data @@ -140,8 +121,6 @@ def _parse_occurred_at(data: object) -> datetime.date | None | Unset: raise TypeError() occurred_at_type_0 = isoparse(data).date() - - return occurred_at_type_0 except (TypeError, ValueError, AttributeError, KeyError): pass @@ -149,7 +128,6 @@ def _parse_occurred_at(data: object) -> datetime.date | None | Unset: occurred_at = _parse_occurred_at(d.pop("occurred_at", UNSET)) - def _parse_create_annual_reminder(data: object) -> bool | None | Unset: if data is None: return data @@ -159,7 +137,6 @@ def _parse_create_annual_reminder(data: object) -> bool | None | Unset: create_annual_reminder = _parse_create_annual_reminder(d.pop("create_annual_reminder", UNSET)) - life_event_update = cls( event_type=event_type, title=title, @@ -168,7 +145,6 @@ def _parse_create_annual_reminder(data: object) -> bool | None | Unset: create_annual_reminder=create_annual_reminder, ) - life_event_update.additional_properties = d return life_event_update diff --git a/kindred-sdk/personal_crm_client/models/life_events_public.py b/kindred-sdk/personal_crm_client/models/life_events_public.py index 79b9c6b4..96f0da33 100644 --- a/kindred-sdk/personal_crm_client/models/life_events_public.py +++ b/kindred-sdk/personal_crm_client/models/life_events_public.py @@ -1,79 +1,61 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator +from typing import TYPE_CHECKING, Any, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from ..types import UNSET, Unset - -from typing import cast - if TYPE_CHECKING: - from ..models.life_event_public import LifeEventPublic - - - + from ..models.life_event_public import LifeEventPublic T = TypeVar("T", bound="LifeEventsPublic") - @_attrs_define class LifeEventsPublic: - """ - Attributes: - data (list[LifeEventPublic]): - count (int): - """ + """ + Attributes: + data (list[LifeEventPublic]): + count (int): + """ data: list[LifeEventPublic] count: int additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) - - - - def to_dict(self) -> dict[str, Any]: - from ..models.life_event_public import LifeEventPublic data = [] for data_item_data in self.data: data_item = data_item_data.to_dict() data.append(data_item) - - count = self.count - field_dict: dict[str, Any] = {} field_dict.update(self.additional_properties) - field_dict.update({ - "data": data, - "count": count, - }) + field_dict.update( + { + "data": data, + "count": count, + } + ) return field_dict - - @classmethod def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: from ..models.life_event_public import LifeEventPublic + d = dict(src_dict) data = [] _data = d.pop("data") - for data_item_data in (_data): + for data_item_data in _data: data_item = LifeEventPublic.from_dict(data_item_data) - - data.append(data_item) - count = d.pop("count") life_events_public = cls( @@ -81,7 +63,6 @@ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: count=count, ) - life_events_public.additional_properties = d return life_events_public diff --git a/kindred-sdk/personal_crm_client/models/media_category.py b/kindred-sdk/personal_crm_client/models/media_category.py index 87e7fcbf..4ba3b426 100644 --- a/kindred-sdk/personal_crm_client/models/media_category.py +++ b/kindred-sdk/personal_crm_client/models/media_category.py @@ -1,5 +1,6 @@ from enum import Enum + class MediaCategory(str, Enum): BOOK = "book" MOVIE = "movie" diff --git a/kindred-sdk/personal_crm_client/models/media_recommendation_create.py b/kindred-sdk/personal_crm_client/models/media_recommendation_create.py index b1a794f6..125cc51e 100644 --- a/kindred-sdk/personal_crm_client/models/media_recommendation_create.py +++ b/kindred-sdk/personal_crm_client/models/media_recommendation_create.py @@ -1,40 +1,31 @@ from __future__ import annotations +import datetime from collections.abc import Mapping -from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator +from typing import Any, TypeVar, cast +from uuid import UUID from attrs import define as _attrs_define from attrs import field as _attrs_field - -from ..types import UNSET, Unset +from dateutil.parser import isoparse from ..models.media_category import MediaCategory from ..types import UNSET, Unset -from dateutil.parser import isoparse -from typing import cast -from uuid import UUID -import datetime - - - - - T = TypeVar("T", bound="MediaRecommendationCreate") - @_attrs_define class MediaRecommendationCreate: - """ - Attributes: - category (MediaCategory): - title (str): Title of the work. - contact_id (UUID): - creator (None | str | Unset): Author, director, artist, or similar creator. - note (None | str | Unset): Why it was recommended or personal reaction. - recommended_at (datetime.date | None | Unset): Date the recommendation was made. - """ + """ + Attributes: + category (MediaCategory): + title (str): Title of the work. + contact_id (UUID): + creator (None | str | Unset): Author, director, artist, or similar creator. + note (None | str | Unset): Why it was recommended or personal reaction. + recommended_at (datetime.date | None | Unset): Date the recommendation was made. + """ category: MediaCategory title: str @@ -44,10 +35,6 @@ class MediaRecommendationCreate: recommended_at: datetime.date | None | Unset = UNSET additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) - - - - def to_dict(self) -> dict[str, Any]: category = self.category.value @@ -75,14 +62,15 @@ def to_dict(self) -> dict[str, Any]: else: recommended_at = self.recommended_at - field_dict: dict[str, Any] = {} field_dict.update(self.additional_properties) - field_dict.update({ - "category": category, - "title": title, - "contact_id": contact_id, - }) + field_dict.update( + { + "category": category, + "title": title, + "contact_id": contact_id, + } + ) if creator is not UNSET: field_dict["creator"] = creator if note is not UNSET: @@ -92,23 +80,15 @@ def to_dict(self) -> dict[str, Any]: return field_dict - - @classmethod def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: d = dict(src_dict) category = MediaCategory(d.pop("category")) - - - title = d.pop("title") contact_id = UUID(d.pop("contact_id")) - - - def _parse_creator(data: object) -> None | str | Unset: if data is None: return data @@ -118,7 +98,6 @@ def _parse_creator(data: object) -> None | str | Unset: creator = _parse_creator(d.pop("creator", UNSET)) - def _parse_note(data: object) -> None | str | Unset: if data is None: return data @@ -128,7 +107,6 @@ def _parse_note(data: object) -> None | str | Unset: note = _parse_note(d.pop("note", UNSET)) - def _parse_recommended_at(data: object) -> datetime.date | None | Unset: if data is None: return data @@ -139,8 +117,6 @@ def _parse_recommended_at(data: object) -> datetime.date | None | Unset: raise TypeError() recommended_at_type_0 = isoparse(data).date() - - return recommended_at_type_0 except (TypeError, ValueError, AttributeError, KeyError): pass @@ -148,7 +124,6 @@ def _parse_recommended_at(data: object) -> datetime.date | None | Unset: recommended_at = _parse_recommended_at(d.pop("recommended_at", UNSET)) - media_recommendation_create = cls( category=category, title=title, @@ -158,7 +133,6 @@ def _parse_recommended_at(data: object) -> datetime.date | None | Unset: recommended_at=recommended_at, ) - media_recommendation_create.additional_properties = d return media_recommendation_create diff --git a/kindred-sdk/personal_crm_client/models/media_recommendation_public.py b/kindred-sdk/personal_crm_client/models/media_recommendation_public.py index 63921461..7f246257 100644 --- a/kindred-sdk/personal_crm_client/models/media_recommendation_public.py +++ b/kindred-sdk/personal_crm_client/models/media_recommendation_public.py @@ -1,43 +1,34 @@ from __future__ import annotations +import datetime from collections.abc import Mapping -from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator +from typing import Any, TypeVar, cast +from uuid import UUID from attrs import define as _attrs_define from attrs import field as _attrs_field - -from ..types import UNSET, Unset +from dateutil.parser import isoparse from ..models.media_category import MediaCategory from ..types import UNSET, Unset -from dateutil.parser import isoparse -from typing import cast -from uuid import UUID -import datetime - - - - - T = TypeVar("T", bound="MediaRecommendationPublic") - @_attrs_define class MediaRecommendationPublic: - """ - Attributes: - category (MediaCategory): - title (str): Title of the work. - id (UUID): - contact_id (UUID): - created_at (datetime.datetime): - updated_at (datetime.datetime): - creator (None | str | Unset): Author, director, artist, or similar creator. - note (None | str | Unset): Why it was recommended or personal reaction. - recommended_at (datetime.date | None | Unset): Date the recommendation was made. - """ + """ + Attributes: + category (MediaCategory): + title (str): Title of the work. + id (UUID): + contact_id (UUID): + created_at (datetime.datetime): + updated_at (datetime.datetime): + creator (None | str | Unset): Author, director, artist, or similar creator. + note (None | str | Unset): Why it was recommended or personal reaction. + recommended_at (datetime.date | None | Unset): Date the recommendation was made. + """ category: MediaCategory title: str @@ -50,10 +41,6 @@ class MediaRecommendationPublic: recommended_at: datetime.date | None | Unset = UNSET additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) - - - - def to_dict(self) -> dict[str, Any]: category = self.category.value @@ -87,17 +74,18 @@ def to_dict(self) -> dict[str, Any]: else: recommended_at = self.recommended_at - field_dict: dict[str, Any] = {} field_dict.update(self.additional_properties) - field_dict.update({ - "category": category, - "title": title, - "id": id, - "contact_id": contact_id, - "created_at": created_at, - "updated_at": updated_at, - }) + field_dict.update( + { + "category": category, + "title": title, + "id": id, + "contact_id": contact_id, + "created_at": created_at, + "updated_at": updated_at, + } + ) if creator is not UNSET: field_dict["creator"] = creator if note is not UNSET: @@ -107,38 +95,21 @@ def to_dict(self) -> dict[str, Any]: return field_dict - - @classmethod def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: d = dict(src_dict) category = MediaCategory(d.pop("category")) - - - title = d.pop("title") id = UUID(d.pop("id")) - - - contact_id = UUID(d.pop("contact_id")) - - - created_at = isoparse(d.pop("created_at")) - - - updated_at = isoparse(d.pop("updated_at")) - - - def _parse_creator(data: object) -> None | str | Unset: if data is None: return data @@ -148,7 +119,6 @@ def _parse_creator(data: object) -> None | str | Unset: creator = _parse_creator(d.pop("creator", UNSET)) - def _parse_note(data: object) -> None | str | Unset: if data is None: return data @@ -158,7 +128,6 @@ def _parse_note(data: object) -> None | str | Unset: note = _parse_note(d.pop("note", UNSET)) - def _parse_recommended_at(data: object) -> datetime.date | None | Unset: if data is None: return data @@ -169,8 +138,6 @@ def _parse_recommended_at(data: object) -> datetime.date | None | Unset: raise TypeError() recommended_at_type_0 = isoparse(data).date() - - return recommended_at_type_0 except (TypeError, ValueError, AttributeError, KeyError): pass @@ -178,7 +145,6 @@ def _parse_recommended_at(data: object) -> datetime.date | None | Unset: recommended_at = _parse_recommended_at(d.pop("recommended_at", UNSET)) - media_recommendation_public = cls( category=category, title=title, @@ -191,7 +157,6 @@ def _parse_recommended_at(data: object) -> datetime.date | None | Unset: recommended_at=recommended_at, ) - media_recommendation_public.additional_properties = d return media_recommendation_public diff --git a/kindred-sdk/personal_crm_client/models/media_recommendation_update.py b/kindred-sdk/personal_crm_client/models/media_recommendation_update.py index ae149e28..e3aee9a1 100644 --- a/kindred-sdk/personal_crm_client/models/media_recommendation_update.py +++ b/kindred-sdk/personal_crm_client/models/media_recommendation_update.py @@ -1,38 +1,29 @@ from __future__ import annotations +import datetime from collections.abc import Mapping -from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator +from typing import Any, TypeVar, cast from attrs import define as _attrs_define from attrs import field as _attrs_field - -from ..types import UNSET, Unset +from dateutil.parser import isoparse from ..models.media_category import MediaCategory from ..types import UNSET, Unset -from dateutil.parser import isoparse -from typing import cast -import datetime - - - - - T = TypeVar("T", bound="MediaRecommendationUpdate") - @_attrs_define class MediaRecommendationUpdate: - """ - Attributes: - category (MediaCategory | None | Unset): - title (None | str | Unset): - creator (None | str | Unset): - note (None | str | Unset): - recommended_at (datetime.date | None | Unset): - """ + """ + Attributes: + category (MediaCategory | None | Unset): + title (None | str | Unset): + creator (None | str | Unset): + note (None | str | Unset): + recommended_at (datetime.date | None | Unset): + """ category: MediaCategory | None | Unset = UNSET title: None | str | Unset = UNSET @@ -41,10 +32,6 @@ class MediaRecommendationUpdate: recommended_at: datetime.date | None | Unset = UNSET additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) - - - - def to_dict(self) -> dict[str, Any]: category: None | str | Unset if isinstance(self.category, Unset): @@ -80,11 +67,9 @@ def to_dict(self) -> dict[str, Any]: else: recommended_at = self.recommended_at - field_dict: dict[str, Any] = {} field_dict.update(self.additional_properties) - field_dict.update({ - }) + field_dict.update({}) if category is not UNSET: field_dict["category"] = category if title is not UNSET: @@ -98,11 +83,10 @@ def to_dict(self) -> dict[str, Any]: return field_dict - - @classmethod def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: d = dict(src_dict) + def _parse_category(data: object) -> MediaCategory | None | Unset: if data is None: return data @@ -113,8 +97,6 @@ def _parse_category(data: object) -> MediaCategory | None | Unset: raise TypeError() category_type_0 = MediaCategory(data) - - return category_type_0 except (TypeError, ValueError, AttributeError, KeyError): pass @@ -122,7 +104,6 @@ def _parse_category(data: object) -> MediaCategory | None | Unset: category = _parse_category(d.pop("category", UNSET)) - def _parse_title(data: object) -> None | str | Unset: if data is None: return data @@ -132,7 +113,6 @@ def _parse_title(data: object) -> None | str | Unset: title = _parse_title(d.pop("title", UNSET)) - def _parse_creator(data: object) -> None | str | Unset: if data is None: return data @@ -142,7 +122,6 @@ def _parse_creator(data: object) -> None | str | Unset: creator = _parse_creator(d.pop("creator", UNSET)) - def _parse_note(data: object) -> None | str | Unset: if data is None: return data @@ -152,7 +131,6 @@ def _parse_note(data: object) -> None | str | Unset: note = _parse_note(d.pop("note", UNSET)) - def _parse_recommended_at(data: object) -> datetime.date | None | Unset: if data is None: return data @@ -163,8 +141,6 @@ def _parse_recommended_at(data: object) -> datetime.date | None | Unset: raise TypeError() recommended_at_type_0 = isoparse(data).date() - - return recommended_at_type_0 except (TypeError, ValueError, AttributeError, KeyError): pass @@ -172,7 +148,6 @@ def _parse_recommended_at(data: object) -> datetime.date | None | Unset: recommended_at = _parse_recommended_at(d.pop("recommended_at", UNSET)) - media_recommendation_update = cls( category=category, title=title, @@ -181,7 +156,6 @@ def _parse_recommended_at(data: object) -> datetime.date | None | Unset: recommended_at=recommended_at, ) - media_recommendation_update.additional_properties = d return media_recommendation_update diff --git a/kindred-sdk/personal_crm_client/models/media_recommendations_public.py b/kindred-sdk/personal_crm_client/models/media_recommendations_public.py index 18c70ca1..1630757e 100644 --- a/kindred-sdk/personal_crm_client/models/media_recommendations_public.py +++ b/kindred-sdk/personal_crm_client/models/media_recommendations_public.py @@ -1,79 +1,61 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator +from typing import TYPE_CHECKING, Any, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from ..types import UNSET, Unset - -from typing import cast - if TYPE_CHECKING: - from ..models.media_recommendation_public import MediaRecommendationPublic - - - + from ..models.media_recommendation_public import MediaRecommendationPublic T = TypeVar("T", bound="MediaRecommendationsPublic") - @_attrs_define class MediaRecommendationsPublic: - """ - Attributes: - data (list[MediaRecommendationPublic]): - count (int): - """ + """ + Attributes: + data (list[MediaRecommendationPublic]): + count (int): + """ data: list[MediaRecommendationPublic] count: int additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) - - - - def to_dict(self) -> dict[str, Any]: - from ..models.media_recommendation_public import MediaRecommendationPublic data = [] for data_item_data in self.data: data_item = data_item_data.to_dict() data.append(data_item) - - count = self.count - field_dict: dict[str, Any] = {} field_dict.update(self.additional_properties) - field_dict.update({ - "data": data, - "count": count, - }) + field_dict.update( + { + "data": data, + "count": count, + } + ) return field_dict - - @classmethod def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: from ..models.media_recommendation_public import MediaRecommendationPublic + d = dict(src_dict) data = [] _data = d.pop("data") - for data_item_data in (_data): + for data_item_data in _data: data_item = MediaRecommendationPublic.from_dict(data_item_data) - - data.append(data_item) - count = d.pop("count") media_recommendations_public = cls( @@ -81,7 +63,6 @@ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: count=count, ) - media_recommendations_public.additional_properties = d return media_recommendations_public diff --git a/kindred-sdk/personal_crm_client/models/mention_source_contact.py b/kindred-sdk/personal_crm_client/models/mention_source_contact.py index 6b4879e7..05c86fac 100644 --- a/kindred-sdk/personal_crm_client/models/mention_source_contact.py +++ b/kindred-sdk/personal_crm_client/models/mention_source_contact.py @@ -1,35 +1,26 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator +from typing import Any, TypeVar, cast +from uuid import UUID from attrs import define as _attrs_define from attrs import field as _attrs_field from ..types import UNSET, Unset -from ..types import UNSET, Unset -from typing import cast -from uuid import UUID - - - - - - T = TypeVar("T", bound="MentionSourceContact") - @_attrs_define class MentionSourceContact: - """ - Attributes: - id (UUID): - first_name (str): - last_name (None | str | Unset): - avatar_url (None | str | Unset): - """ + """ + Attributes: + id (UUID): + first_name (str): + last_name (None | str | Unset): + avatar_url (None | str | Unset): + """ id: UUID first_name: str @@ -37,10 +28,6 @@ class MentionSourceContact: avatar_url: None | str | Unset = UNSET additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) - - - - def to_dict(self) -> dict[str, Any]: id = str(self.id) @@ -58,13 +45,14 @@ def to_dict(self) -> dict[str, Any]: else: avatar_url = self.avatar_url - field_dict: dict[str, Any] = {} field_dict.update(self.additional_properties) - field_dict.update({ - "id": id, - "first_name": first_name, - }) + field_dict.update( + { + "id": id, + "first_name": first_name, + } + ) if last_name is not UNSET: field_dict["last_name"] = last_name if avatar_url is not UNSET: @@ -72,16 +60,11 @@ def to_dict(self) -> dict[str, Any]: return field_dict - - @classmethod def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: d = dict(src_dict) id = UUID(d.pop("id")) - - - first_name = d.pop("first_name") def _parse_last_name(data: object) -> None | str | Unset: @@ -93,7 +76,6 @@ def _parse_last_name(data: object) -> None | str | Unset: last_name = _parse_last_name(d.pop("last_name", UNSET)) - def _parse_avatar_url(data: object) -> None | str | Unset: if data is None: return data @@ -103,7 +85,6 @@ def _parse_avatar_url(data: object) -> None | str | Unset: avatar_url = _parse_avatar_url(d.pop("avatar_url", UNSET)) - mention_source_contact = cls( id=id, first_name=first_name, @@ -111,7 +92,6 @@ def _parse_avatar_url(data: object) -> None | str | Unset: avatar_url=avatar_url, ) - mention_source_contact.additional_properties = d return mention_source_contact diff --git a/kindred-sdk/personal_crm_client/models/message.py b/kindred-sdk/personal_crm_client/models/message.py index 368f4302..8ab6b223 100644 --- a/kindred-sdk/personal_crm_client/models/message.py +++ b/kindred-sdk/personal_crm_client/models/message.py @@ -1,51 +1,37 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator +from typing import Any, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from ..types import UNSET, Unset - - - - - - - T = TypeVar("T", bound="Message") - @_attrs_define class Message: - """ - Attributes: - message (str): - """ + """ + Attributes: + message (str): + """ message: str additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) - - - - def to_dict(self) -> dict[str, Any]: message = self.message - field_dict: dict[str, Any] = {} field_dict.update(self.additional_properties) - field_dict.update({ - "message": message, - }) + field_dict.update( + { + "message": message, + } + ) return field_dict - - @classmethod def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: d = dict(src_dict) @@ -55,7 +41,6 @@ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: message=message, ) - message.additional_properties = d return message diff --git a/kindred-sdk/personal_crm_client/models/new_password.py b/kindred-sdk/personal_crm_client/models/new_password.py index 1833dbcf..8bb0268c 100644 --- a/kindred-sdk/personal_crm_client/models/new_password.py +++ b/kindred-sdk/personal_crm_client/models/new_password.py @@ -1,56 +1,42 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator +from typing import Any, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from ..types import UNSET, Unset - - - - - - - T = TypeVar("T", bound="NewPassword") - @_attrs_define class NewPassword: - """ - Attributes: - token (str): - new_password (str): - """ + """ + Attributes: + token (str): + new_password (str): + """ token: str new_password: str additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) - - - - def to_dict(self) -> dict[str, Any]: token = self.token new_password = self.new_password - field_dict: dict[str, Any] = {} field_dict.update(self.additional_properties) - field_dict.update({ - "token": token, - "new_password": new_password, - }) + field_dict.update( + { + "token": token, + "new_password": new_password, + } + ) return field_dict - - @classmethod def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: d = dict(src_dict) @@ -63,7 +49,6 @@ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: new_password=new_password, ) - new_password.additional_properties = d return new_password diff --git a/kindred-sdk/personal_crm_client/models/note_create.py b/kindred-sdk/personal_crm_client/models/note_create.py index 12d8534b..6c812584 100644 --- a/kindred-sdk/personal_crm_client/models/note_create.py +++ b/kindred-sdk/personal_crm_client/models/note_create.py @@ -1,57 +1,43 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator +from typing import Any, TypeVar +from uuid import UUID from attrs import define as _attrs_define from attrs import field as _attrs_field -from ..types import UNSET, Unset - -from uuid import UUID - - - - - - T = TypeVar("T", bound="NoteCreate") - @_attrs_define class NoteCreate: - """ - Attributes: - body (str): Note body, 1-50000 chars. - contact_id (UUID): - """ + """ + Attributes: + body (str): Note body, 1-50000 chars. + contact_id (UUID): + """ body: str contact_id: UUID additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) - - - - def to_dict(self) -> dict[str, Any]: body = self.body contact_id = str(self.contact_id) - field_dict: dict[str, Any] = {} field_dict.update(self.additional_properties) - field_dict.update({ - "body": body, - "contact_id": contact_id, - }) + field_dict.update( + { + "body": body, + "contact_id": contact_id, + } + ) return field_dict - - @classmethod def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: d = dict(src_dict) @@ -59,15 +45,11 @@ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: contact_id = UUID(d.pop("contact_id")) - - - note_create = cls( body=body, contact_id=contact_id, ) - note_create.additional_properties = d return note_create diff --git a/kindred-sdk/personal_crm_client/models/note_mention_public.py b/kindred-sdk/personal_crm_client/models/note_mention_public.py index c128c1be..4d8687fb 100644 --- a/kindred-sdk/personal_crm_client/models/note_mention_public.py +++ b/kindred-sdk/personal_crm_client/models/note_mention_public.py @@ -1,38 +1,30 @@ from __future__ import annotations +import datetime from collections.abc import Mapping -from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator +from typing import TYPE_CHECKING, Any, TypeVar +from uuid import UUID from attrs import define as _attrs_define from attrs import field as _attrs_field - -from ..types import UNSET, Unset - from dateutil.parser import isoparse -from typing import cast -from uuid import UUID -import datetime if TYPE_CHECKING: - from ..models.mention_source_contact import MentionSourceContact - - - + from ..models.mention_source_contact import MentionSourceContact T = TypeVar("T", bound="NoteMentionPublic") - @_attrs_define class NoteMentionPublic: - """ - Attributes: - note_id (UUID): - note_body (str): - note_created_at (datetime.datetime): - source_contact (MentionSourceContact): - """ + """ + Attributes: + note_id (UUID): + note_body (str): + note_created_at (datetime.datetime): + source_contact (MentionSourceContact): + """ note_id: UUID note_body: str @@ -40,12 +32,7 @@ class NoteMentionPublic: source_contact: MentionSourceContact additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) - - - - def to_dict(self) -> dict[str, Any]: - from ..models.mention_source_contact import MentionSourceContact note_id = str(self.note_id) note_body = self.note_body @@ -54,41 +41,32 @@ def to_dict(self) -> dict[str, Any]: source_contact = self.source_contact.to_dict() - field_dict: dict[str, Any] = {} field_dict.update(self.additional_properties) - field_dict.update({ - "note_id": note_id, - "note_body": note_body, - "note_created_at": note_created_at, - "source_contact": source_contact, - }) + field_dict.update( + { + "note_id": note_id, + "note_body": note_body, + "note_created_at": note_created_at, + "source_contact": source_contact, + } + ) return field_dict - - @classmethod def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: from ..models.mention_source_contact import MentionSourceContact + d = dict(src_dict) note_id = UUID(d.pop("note_id")) - - - note_body = d.pop("note_body") note_created_at = isoparse(d.pop("note_created_at")) - - - source_contact = MentionSourceContact.from_dict(d.pop("source_contact")) - - - note_mention_public = cls( note_id=note_id, note_body=note_body, @@ -96,7 +74,6 @@ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: source_contact=source_contact, ) - note_mention_public.additional_properties = d return note_mention_public diff --git a/kindred-sdk/personal_crm_client/models/note_public.py b/kindred-sdk/personal_crm_client/models/note_public.py index 0ee1eaf7..ff1d17af 100644 --- a/kindred-sdk/personal_crm_client/models/note_public.py +++ b/kindred-sdk/personal_crm_client/models/note_public.py @@ -1,37 +1,27 @@ from __future__ import annotations +import datetime from collections.abc import Mapping -from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator +from typing import Any, TypeVar +from uuid import UUID from attrs import define as _attrs_define from attrs import field as _attrs_field - -from ..types import UNSET, Unset - from dateutil.parser import isoparse -from typing import cast -from uuid import UUID -import datetime - - - - - T = TypeVar("T", bound="NotePublic") - @_attrs_define class NotePublic: - """ - Attributes: - body (str): Note body, 1-50000 chars. - id (UUID): - contact_id (UUID): - created_at (datetime.datetime): - updated_at (datetime.datetime): - """ + """ + Attributes: + body (str): Note body, 1-50000 chars. + id (UUID): + contact_id (UUID): + created_at (datetime.datetime): + updated_at (datetime.datetime): + """ body: str id: UUID @@ -40,10 +30,6 @@ class NotePublic: updated_at: datetime.datetime additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) - - - - def to_dict(self) -> dict[str, Any]: body = self.body @@ -55,21 +41,20 @@ def to_dict(self) -> dict[str, Any]: updated_at = self.updated_at.isoformat() - field_dict: dict[str, Any] = {} field_dict.update(self.additional_properties) - field_dict.update({ - "body": body, - "id": id, - "contact_id": contact_id, - "created_at": created_at, - "updated_at": updated_at, - }) + field_dict.update( + { + "body": body, + "id": id, + "contact_id": contact_id, + "created_at": created_at, + "updated_at": updated_at, + } + ) return field_dict - - @classmethod def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: d = dict(src_dict) @@ -77,24 +62,12 @@ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: id = UUID(d.pop("id")) - - - contact_id = UUID(d.pop("contact_id")) - - - created_at = isoparse(d.pop("created_at")) - - - updated_at = isoparse(d.pop("updated_at")) - - - note_public = cls( body=body, id=id, @@ -103,7 +76,6 @@ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: updated_at=updated_at, ) - note_public.additional_properties = d return note_public diff --git a/kindred-sdk/personal_crm_client/models/note_update.py b/kindred-sdk/personal_crm_client/models/note_update.py index 5f51a200..4d28cc1f 100644 --- a/kindred-sdk/personal_crm_client/models/note_update.py +++ b/kindred-sdk/personal_crm_client/models/note_update.py @@ -1,39 +1,26 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator +from typing import Any, TypeVar, cast from attrs import define as _attrs_define from attrs import field as _attrs_field from ..types import UNSET, Unset -from ..types import UNSET, Unset -from typing import cast - - - - - - T = TypeVar("T", bound="NoteUpdate") - @_attrs_define class NoteUpdate: - """ - Attributes: - body (None | str | Unset): - """ + """ + Attributes: + body (None | str | Unset): + """ body: None | str | Unset = UNSET additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) - - - - def to_dict(self) -> dict[str, Any]: body: None | str | Unset if isinstance(self.body, Unset): @@ -41,21 +28,18 @@ def to_dict(self) -> dict[str, Any]: else: body = self.body - field_dict: dict[str, Any] = {} field_dict.update(self.additional_properties) - field_dict.update({ - }) + field_dict.update({}) if body is not UNSET: field_dict["body"] = body return field_dict - - @classmethod def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: d = dict(src_dict) + def _parse_body(data: object) -> None | str | Unset: if data is None: return data @@ -65,12 +49,10 @@ def _parse_body(data: object) -> None | str | Unset: body = _parse_body(d.pop("body", UNSET)) - note_update = cls( body=body, ) - note_update.additional_properties = d return note_update diff --git a/kindred-sdk/personal_crm_client/models/notes_public.py b/kindred-sdk/personal_crm_client/models/notes_public.py index 67d5e2a3..5741dc5e 100644 --- a/kindred-sdk/personal_crm_client/models/notes_public.py +++ b/kindred-sdk/personal_crm_client/models/notes_public.py @@ -1,79 +1,61 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator +from typing import TYPE_CHECKING, Any, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from ..types import UNSET, Unset - -from typing import cast - if TYPE_CHECKING: - from ..models.note_public import NotePublic - - - + from ..models.note_public import NotePublic T = TypeVar("T", bound="NotesPublic") - @_attrs_define class NotesPublic: - """ - Attributes: - data (list[NotePublic]): - count (int): - """ + """ + Attributes: + data (list[NotePublic]): + count (int): + """ data: list[NotePublic] count: int additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) - - - - def to_dict(self) -> dict[str, Any]: - from ..models.note_public import NotePublic data = [] for data_item_data in self.data: data_item = data_item_data.to_dict() data.append(data_item) - - count = self.count - field_dict: dict[str, Any] = {} field_dict.update(self.additional_properties) - field_dict.update({ - "data": data, - "count": count, - }) + field_dict.update( + { + "data": data, + "count": count, + } + ) return field_dict - - @classmethod def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: from ..models.note_public import NotePublic + d = dict(src_dict) data = [] _data = d.pop("data") - for data_item_data in (_data): + for data_item_data in _data: data_item = NotePublic.from_dict(data_item_data) - - data.append(data_item) - count = d.pop("count") notes_public = cls( @@ -81,7 +63,6 @@ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: count=count, ) - notes_public.additional_properties = d return notes_public diff --git a/kindred-sdk/personal_crm_client/models/pet_create.py b/kindred-sdk/personal_crm_client/models/pet_create.py index 3f145b8a..b9436929 100644 --- a/kindred-sdk/personal_crm_client/models/pet_create.py +++ b/kindred-sdk/personal_crm_client/models/pet_create.py @@ -1,36 +1,27 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator +from typing import Any, TypeVar, cast +from uuid import UUID from attrs import define as _attrs_define from attrs import field as _attrs_field from ..types import UNSET, Unset -from ..types import UNSET, Unset -from typing import cast -from uuid import UUID - - - - - - T = TypeVar("T", bound="PetCreate") - @_attrs_define class PetCreate: - """ - Attributes: - name (str): Pet's name. - contact_id (UUID): - species (None | str | Unset): Species like dog, cat, bird. - breed (None | str | Unset): Breed, if known. - notes (None | str | Unset): Freeform notes (e.g. allergies, birthday). - """ + """ + Attributes: + name (str): Pet's name. + contact_id (UUID): + species (None | str | Unset): Species like dog, cat, bird. + breed (None | str | Unset): Breed, if known. + notes (None | str | Unset): Freeform notes (e.g. allergies, birthday). + """ name: str contact_id: UUID @@ -39,10 +30,6 @@ class PetCreate: notes: None | str | Unset = UNSET additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) - - - - def to_dict(self) -> dict[str, Any]: name = self.name @@ -66,13 +53,14 @@ def to_dict(self) -> dict[str, Any]: else: notes = self.notes - field_dict: dict[str, Any] = {} field_dict.update(self.additional_properties) - field_dict.update({ - "name": name, - "contact_id": contact_id, - }) + field_dict.update( + { + "name": name, + "contact_id": contact_id, + } + ) if species is not UNSET: field_dict["species"] = species if breed is not UNSET: @@ -82,8 +70,6 @@ def to_dict(self) -> dict[str, Any]: return field_dict - - @classmethod def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: d = dict(src_dict) @@ -91,9 +77,6 @@ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: contact_id = UUID(d.pop("contact_id")) - - - def _parse_species(data: object) -> None | str | Unset: if data is None: return data @@ -103,7 +86,6 @@ def _parse_species(data: object) -> None | str | Unset: species = _parse_species(d.pop("species", UNSET)) - def _parse_breed(data: object) -> None | str | Unset: if data is None: return data @@ -113,7 +95,6 @@ def _parse_breed(data: object) -> None | str | Unset: breed = _parse_breed(d.pop("breed", UNSET)) - def _parse_notes(data: object) -> None | str | Unset: if data is None: return data @@ -123,7 +104,6 @@ def _parse_notes(data: object) -> None | str | Unset: notes = _parse_notes(d.pop("notes", UNSET)) - pet_create = cls( name=name, contact_id=contact_id, @@ -132,7 +112,6 @@ def _parse_notes(data: object) -> None | str | Unset: notes=notes, ) - pet_create.additional_properties = d return pet_create diff --git a/kindred-sdk/personal_crm_client/models/pet_public.py b/kindred-sdk/personal_crm_client/models/pet_public.py index 52ee1d80..ef2ea303 100644 --- a/kindred-sdk/personal_crm_client/models/pet_public.py +++ b/kindred-sdk/personal_crm_client/models/pet_public.py @@ -1,37 +1,28 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator +from typing import Any, TypeVar, cast +from uuid import UUID from attrs import define as _attrs_define from attrs import field as _attrs_field from ..types import UNSET, Unset -from ..types import UNSET, Unset -from typing import cast -from uuid import UUID - - - - - - T = TypeVar("T", bound="PetPublic") - @_attrs_define class PetPublic: - """ - Attributes: - name (str): Pet's name. - id (UUID): - contact_id (UUID): - species (None | str | Unset): Species like dog, cat, bird. - breed (None | str | Unset): Breed, if known. - notes (None | str | Unset): Freeform notes (e.g. allergies, birthday). - """ + """ + Attributes: + name (str): Pet's name. + id (UUID): + contact_id (UUID): + species (None | str | Unset): Species like dog, cat, bird. + breed (None | str | Unset): Breed, if known. + notes (None | str | Unset): Freeform notes (e.g. allergies, birthday). + """ name: str id: UUID @@ -41,10 +32,6 @@ class PetPublic: notes: None | str | Unset = UNSET additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) - - - - def to_dict(self) -> dict[str, Any]: name = self.name @@ -70,14 +57,15 @@ def to_dict(self) -> dict[str, Any]: else: notes = self.notes - field_dict: dict[str, Any] = {} field_dict.update(self.additional_properties) - field_dict.update({ - "name": name, - "id": id, - "contact_id": contact_id, - }) + field_dict.update( + { + "name": name, + "id": id, + "contact_id": contact_id, + } + ) if species is not UNSET: field_dict["species"] = species if breed is not UNSET: @@ -87,8 +75,6 @@ def to_dict(self) -> dict[str, Any]: return field_dict - - @classmethod def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: d = dict(src_dict) @@ -96,14 +82,8 @@ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: id = UUID(d.pop("id")) - - - contact_id = UUID(d.pop("contact_id")) - - - def _parse_species(data: object) -> None | str | Unset: if data is None: return data @@ -113,7 +93,6 @@ def _parse_species(data: object) -> None | str | Unset: species = _parse_species(d.pop("species", UNSET)) - def _parse_breed(data: object) -> None | str | Unset: if data is None: return data @@ -123,7 +102,6 @@ def _parse_breed(data: object) -> None | str | Unset: breed = _parse_breed(d.pop("breed", UNSET)) - def _parse_notes(data: object) -> None | str | Unset: if data is None: return data @@ -133,7 +111,6 @@ def _parse_notes(data: object) -> None | str | Unset: notes = _parse_notes(d.pop("notes", UNSET)) - pet_public = cls( name=name, id=id, @@ -143,7 +120,6 @@ def _parse_notes(data: object) -> None | str | Unset: notes=notes, ) - pet_public.additional_properties = d return pet_public diff --git a/kindred-sdk/personal_crm_client/models/pet_update.py b/kindred-sdk/personal_crm_client/models/pet_update.py index 01bfc0d9..e094e45f 100644 --- a/kindred-sdk/personal_crm_client/models/pet_update.py +++ b/kindred-sdk/personal_crm_client/models/pet_update.py @@ -1,34 +1,25 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator +from typing import Any, TypeVar, cast from attrs import define as _attrs_define from attrs import field as _attrs_field from ..types import UNSET, Unset -from ..types import UNSET, Unset -from typing import cast - - - - - - T = TypeVar("T", bound="PetUpdate") - @_attrs_define class PetUpdate: - """ - Attributes: - name (None | str | Unset): - species (None | str | Unset): - breed (None | str | Unset): - notes (None | str | Unset): - """ + """ + Attributes: + name (None | str | Unset): + species (None | str | Unset): + breed (None | str | Unset): + notes (None | str | Unset): + """ name: None | str | Unset = UNSET species: None | str | Unset = UNSET @@ -36,10 +27,6 @@ class PetUpdate: notes: None | str | Unset = UNSET additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) - - - - def to_dict(self) -> dict[str, Any]: name: None | str | Unset if isinstance(self.name, Unset): @@ -65,11 +52,9 @@ def to_dict(self) -> dict[str, Any]: else: notes = self.notes - field_dict: dict[str, Any] = {} field_dict.update(self.additional_properties) - field_dict.update({ - }) + field_dict.update({}) if name is not UNSET: field_dict["name"] = name if species is not UNSET: @@ -81,11 +66,10 @@ def to_dict(self) -> dict[str, Any]: return field_dict - - @classmethod def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: d = dict(src_dict) + def _parse_name(data: object) -> None | str | Unset: if data is None: return data @@ -95,7 +79,6 @@ def _parse_name(data: object) -> None | str | Unset: name = _parse_name(d.pop("name", UNSET)) - def _parse_species(data: object) -> None | str | Unset: if data is None: return data @@ -105,7 +88,6 @@ def _parse_species(data: object) -> None | str | Unset: species = _parse_species(d.pop("species", UNSET)) - def _parse_breed(data: object) -> None | str | Unset: if data is None: return data @@ -115,7 +97,6 @@ def _parse_breed(data: object) -> None | str | Unset: breed = _parse_breed(d.pop("breed", UNSET)) - def _parse_notes(data: object) -> None | str | Unset: if data is None: return data @@ -125,7 +106,6 @@ def _parse_notes(data: object) -> None | str | Unset: notes = _parse_notes(d.pop("notes", UNSET)) - pet_update = cls( name=name, species=species, @@ -133,7 +113,6 @@ def _parse_notes(data: object) -> None | str | Unset: notes=notes, ) - pet_update.additional_properties = d return pet_update diff --git a/kindred-sdk/personal_crm_client/models/private_user_create.py b/kindred-sdk/personal_crm_client/models/private_user_create.py index 0274db59..583bfd97 100644 --- a/kindred-sdk/personal_crm_client/models/private_user_create.py +++ b/kindred-sdk/personal_crm_client/models/private_user_create.py @@ -1,33 +1,25 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator +from typing import Any, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field from ..types import UNSET, Unset -from ..types import UNSET, Unset - - - - - - T = TypeVar("T", bound="PrivateUserCreate") - @_attrs_define class PrivateUserCreate: - """ - Attributes: - email (str): - password (str): - full_name (str): - is_verified (bool | Unset): Default: False. - """ + """ + Attributes: + email (str): + password (str): + full_name (str): + is_verified (bool | Unset): Default: False. + """ email: str password: str @@ -35,10 +27,6 @@ class PrivateUserCreate: is_verified: bool | Unset = False additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) - - - - def to_dict(self) -> dict[str, Any]: email = self.email @@ -48,21 +36,20 @@ def to_dict(self) -> dict[str, Any]: is_verified = self.is_verified - field_dict: dict[str, Any] = {} field_dict.update(self.additional_properties) - field_dict.update({ - "email": email, - "password": password, - "full_name": full_name, - }) + field_dict.update( + { + "email": email, + "password": password, + "full_name": full_name, + } + ) if is_verified is not UNSET: field_dict["is_verified"] = is_verified return field_dict - - @classmethod def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: d = dict(src_dict) @@ -81,7 +68,6 @@ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: is_verified=is_verified, ) - private_user_create.additional_properties = d return private_user_create diff --git a/kindred-sdk/personal_crm_client/models/relationship_create.py b/kindred-sdk/personal_crm_client/models/relationship_create.py index 1a95bf90..2ab501c7 100644 --- a/kindred-sdk/personal_crm_client/models/relationship_create.py +++ b/kindred-sdk/personal_crm_client/models/relationship_create.py @@ -1,37 +1,28 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator +from typing import Any, TypeVar, cast +from uuid import UUID from attrs import define as _attrs_define from attrs import field as _attrs_field from ..types import UNSET, Unset -from ..types import UNSET, Unset -from typing import cast -from uuid import UUID - - - - - - T = TypeVar("T", bound="RelationshipCreate") - @_attrs_define class RelationshipCreate: - """ - Attributes: - relationship_type (str): Kind of relationship: spouse, child, parent, sibling, friend, colleague, etc. - contact_id (UUID): - related_contact_id (UUID): - notes (None | str | Unset): Additional context about the relationship. - inverse_relationship_type (None | str | Unset): Type for the auto-generated inverse row. If omitted, the server - infers it from a known map of symmetric/asymmetric types and returns 422 when it cannot. - """ + """ + Attributes: + relationship_type (str): Kind of relationship: spouse, child, parent, sibling, friend, colleague, etc. + contact_id (UUID): + related_contact_id (UUID): + notes (None | str | Unset): Additional context about the relationship. + inverse_relationship_type (None | str | Unset): Type for the auto-generated inverse row. If omitted, the server + infers it from a known map of symmetric/asymmetric types and returns 422 when it cannot. + """ relationship_type: str contact_id: UUID @@ -40,10 +31,6 @@ class RelationshipCreate: inverse_relationship_type: None | str | Unset = UNSET additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) - - - - def to_dict(self) -> dict[str, Any]: relationship_type = self.relationship_type @@ -63,14 +50,15 @@ def to_dict(self) -> dict[str, Any]: else: inverse_relationship_type = self.inverse_relationship_type - field_dict: dict[str, Any] = {} field_dict.update(self.additional_properties) - field_dict.update({ - "relationship_type": relationship_type, - "contact_id": contact_id, - "related_contact_id": related_contact_id, - }) + field_dict.update( + { + "relationship_type": relationship_type, + "contact_id": contact_id, + "related_contact_id": related_contact_id, + } + ) if notes is not UNSET: field_dict["notes"] = notes if inverse_relationship_type is not UNSET: @@ -78,8 +66,6 @@ def to_dict(self) -> dict[str, Any]: return field_dict - - @classmethod def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: d = dict(src_dict) @@ -87,14 +73,8 @@ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: contact_id = UUID(d.pop("contact_id")) - - - related_contact_id = UUID(d.pop("related_contact_id")) - - - def _parse_notes(data: object) -> None | str | Unset: if data is None: return data @@ -104,7 +84,6 @@ def _parse_notes(data: object) -> None | str | Unset: notes = _parse_notes(d.pop("notes", UNSET)) - def _parse_inverse_relationship_type(data: object) -> None | str | Unset: if data is None: return data @@ -114,7 +93,6 @@ def _parse_inverse_relationship_type(data: object) -> None | str | Unset: inverse_relationship_type = _parse_inverse_relationship_type(d.pop("inverse_relationship_type", UNSET)) - relationship_create = cls( relationship_type=relationship_type, contact_id=contact_id, @@ -123,7 +101,6 @@ def _parse_inverse_relationship_type(data: object) -> None | str | Unset: inverse_relationship_type=inverse_relationship_type, ) - relationship_create.additional_properties = d return relationship_create diff --git a/kindred-sdk/personal_crm_client/models/relationship_public.py b/kindred-sdk/personal_crm_client/models/relationship_public.py index 4e5efd62..2c5eb0d2 100644 --- a/kindred-sdk/personal_crm_client/models/relationship_public.py +++ b/kindred-sdk/personal_crm_client/models/relationship_public.py @@ -1,37 +1,28 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator +from typing import Any, TypeVar, cast +from uuid import UUID from attrs import define as _attrs_define from attrs import field as _attrs_field from ..types import UNSET, Unset -from ..types import UNSET, Unset -from typing import cast -from uuid import UUID - - - - - - T = TypeVar("T", bound="RelationshipPublic") - @_attrs_define class RelationshipPublic: - """ - Attributes: - relationship_type (str): Kind of relationship: spouse, child, parent, sibling, friend, colleague, etc. - id (UUID): - contact_id (UUID): - related_contact_id (UUID): - notes (None | str | Unset): Additional context about the relationship. - inverse_id (None | Unset | UUID): - """ + """ + Attributes: + relationship_type (str): Kind of relationship: spouse, child, parent, sibling, friend, colleague, etc. + id (UUID): + contact_id (UUID): + related_contact_id (UUID): + notes (None | str | Unset): Additional context about the relationship. + inverse_id (None | Unset | UUID): + """ relationship_type: str id: UUID @@ -41,10 +32,6 @@ class RelationshipPublic: inverse_id: None | Unset | UUID = UNSET additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) - - - - def to_dict(self) -> dict[str, Any]: relationship_type = self.relationship_type @@ -68,15 +55,16 @@ def to_dict(self) -> dict[str, Any]: else: inverse_id = self.inverse_id - field_dict: dict[str, Any] = {} field_dict.update(self.additional_properties) - field_dict.update({ - "relationship_type": relationship_type, - "id": id, - "contact_id": contact_id, - "related_contact_id": related_contact_id, - }) + field_dict.update( + { + "relationship_type": relationship_type, + "id": id, + "contact_id": contact_id, + "related_contact_id": related_contact_id, + } + ) if notes is not UNSET: field_dict["notes"] = notes if inverse_id is not UNSET: @@ -84,8 +72,6 @@ def to_dict(self) -> dict[str, Any]: return field_dict - - @classmethod def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: d = dict(src_dict) @@ -93,19 +79,10 @@ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: id = UUID(d.pop("id")) - - - contact_id = UUID(d.pop("contact_id")) - - - related_contact_id = UUID(d.pop("related_contact_id")) - - - def _parse_notes(data: object) -> None | str | Unset: if data is None: return data @@ -115,7 +92,6 @@ def _parse_notes(data: object) -> None | str | Unset: notes = _parse_notes(d.pop("notes", UNSET)) - def _parse_inverse_id(data: object) -> None | Unset | UUID: if data is None: return data @@ -126,8 +102,6 @@ def _parse_inverse_id(data: object) -> None | Unset | UUID: raise TypeError() inverse_id_type_0 = UUID(data) - - return inverse_id_type_0 except (TypeError, ValueError, AttributeError, KeyError): pass @@ -135,7 +109,6 @@ def _parse_inverse_id(data: object) -> None | Unset | UUID: inverse_id = _parse_inverse_id(d.pop("inverse_id", UNSET)) - relationship_public = cls( relationship_type=relationship_type, id=id, @@ -145,7 +118,6 @@ def _parse_inverse_id(data: object) -> None | Unset | UUID: inverse_id=inverse_id, ) - relationship_public.additional_properties = d return relationship_public diff --git a/kindred-sdk/personal_crm_client/models/relationship_update.py b/kindred-sdk/personal_crm_client/models/relationship_update.py index 90a6c438..def1f91a 100644 --- a/kindred-sdk/personal_crm_client/models/relationship_update.py +++ b/kindred-sdk/personal_crm_client/models/relationship_update.py @@ -1,41 +1,28 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator +from typing import Any, TypeVar, cast from attrs import define as _attrs_define from attrs import field as _attrs_field from ..types import UNSET, Unset -from ..types import UNSET, Unset -from typing import cast - - - - - - T = TypeVar("T", bound="RelationshipUpdate") - @_attrs_define class RelationshipUpdate: - """ - Attributes: - relationship_type (None | str | Unset): - notes (None | str | Unset): - """ + """ + Attributes: + relationship_type (None | str | Unset): + notes (None | str | Unset): + """ relationship_type: None | str | Unset = UNSET notes: None | str | Unset = UNSET additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) - - - - def to_dict(self) -> dict[str, Any]: relationship_type: None | str | Unset if isinstance(self.relationship_type, Unset): @@ -49,11 +36,9 @@ def to_dict(self) -> dict[str, Any]: else: notes = self.notes - field_dict: dict[str, Any] = {} field_dict.update(self.additional_properties) - field_dict.update({ - }) + field_dict.update({}) if relationship_type is not UNSET: field_dict["relationship_type"] = relationship_type if notes is not UNSET: @@ -61,11 +46,10 @@ def to_dict(self) -> dict[str, Any]: return field_dict - - @classmethod def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: d = dict(src_dict) + def _parse_relationship_type(data: object) -> None | str | Unset: if data is None: return data @@ -75,7 +59,6 @@ def _parse_relationship_type(data: object) -> None | str | Unset: relationship_type = _parse_relationship_type(d.pop("relationship_type", UNSET)) - def _parse_notes(data: object) -> None | str | Unset: if data is None: return data @@ -85,13 +68,11 @@ def _parse_notes(data: object) -> None | str | Unset: notes = _parse_notes(d.pop("notes", UNSET)) - relationship_update = cls( relationship_type=relationship_type, notes=notes, ) - relationship_update.additional_properties = d return relationship_update diff --git a/kindred-sdk/personal_crm_client/models/relationships_lookup_inverse_response_relationships_lookup_inverse.py b/kindred-sdk/personal_crm_client/models/relationships_lookup_inverse_response_relationships_lookup_inverse.py index 2651243f..bb7265bd 100644 --- a/kindred-sdk/personal_crm_client/models/relationships_lookup_inverse_response_relationships_lookup_inverse.py +++ b/kindred-sdk/personal_crm_client/models/relationships_lookup_inverse_response_relationships_lookup_inverse.py @@ -1,56 +1,35 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator +from typing import Any, TypeVar, cast from attrs import define as _attrs_define from attrs import field as _attrs_field -from ..types import UNSET, Unset - -from typing import cast - - - - - - T = TypeVar("T", bound="RelationshipsLookupInverseResponseRelationshipsLookupInverse") - @_attrs_define class RelationshipsLookupInverseResponseRelationshipsLookupInverse: - """ - """ + """ """ additional_properties: dict[str, None | str] = _attrs_field(init=False, factory=dict) - - - - def to_dict(self) -> dict[str, Any]: - field_dict: dict[str, Any] = {} for prop_name, prop in self.additional_properties.items(): - field_dict[prop_name] = prop - return field_dict - - @classmethod def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: d = dict(src_dict) - relationships_lookup_inverse_response_relationships_lookup_inverse = cls( - ) - + relationships_lookup_inverse_response_relationships_lookup_inverse = cls() additional_properties = {} for prop_name, prop_dict in d.items(): + def _parse_additional_property(data: object) -> None | str: if data is None: return data diff --git a/kindred-sdk/personal_crm_client/models/reminder_create.py b/kindred-sdk/personal_crm_client/models/reminder_create.py index 17813987..a68037d0 100644 --- a/kindred-sdk/personal_crm_client/models/reminder_create.py +++ b/kindred-sdk/personal_crm_client/models/reminder_create.py @@ -1,40 +1,31 @@ from __future__ import annotations +import datetime from collections.abc import Mapping -from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator +from typing import Any, TypeVar, cast +from uuid import UUID from attrs import define as _attrs_define from attrs import field as _attrs_field - -from ..types import UNSET, Unset +from dateutil.parser import isoparse from ..models.reminder_frequency import ReminderFrequency from ..types import UNSET, Unset -from dateutil.parser import isoparse -from typing import cast -from uuid import UUID -import datetime - - - - - T = TypeVar("T", bound="ReminderCreate") - @_attrs_define class ReminderCreate: - """ - Attributes: - title (str): Reminder title. - remind_at (datetime.datetime): When to fire the reminder. - description (None | str | Unset): Extra details shown with the reminder. - frequency (ReminderFrequency | Unset): - is_active (bool | Unset): Enable or disable without deleting. Default: True. - contact_id (None | Unset | UUID): - """ + """ + Attributes: + title (str): Reminder title. + remind_at (datetime.datetime): When to fire the reminder. + description (None | str | Unset): Extra details shown with the reminder. + frequency (ReminderFrequency | Unset): + is_active (bool | Unset): Enable or disable without deleting. Default: True. + contact_id (None | Unset | UUID): + """ title: str remind_at: datetime.datetime @@ -44,10 +35,6 @@ class ReminderCreate: contact_id: None | Unset | UUID = UNSET additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) - - - - def to_dict(self) -> dict[str, Any]: title = self.title @@ -63,7 +50,6 @@ def to_dict(self) -> dict[str, Any]: if not isinstance(self.frequency, Unset): frequency = self.frequency.value - is_active = self.is_active contact_id: None | str | Unset @@ -74,13 +60,14 @@ def to_dict(self) -> dict[str, Any]: else: contact_id = self.contact_id - field_dict: dict[str, Any] = {} field_dict.update(self.additional_properties) - field_dict.update({ - "title": title, - "remind_at": remind_at, - }) + field_dict.update( + { + "title": title, + "remind_at": remind_at, + } + ) if description is not UNSET: field_dict["description"] = description if frequency is not UNSET: @@ -92,8 +79,6 @@ def to_dict(self) -> dict[str, Any]: return field_dict - - @classmethod def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: d = dict(src_dict) @@ -101,9 +86,6 @@ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: remind_at = isoparse(d.pop("remind_at")) - - - def _parse_description(data: object) -> None | str | Unset: if data is None: return data @@ -113,17 +95,13 @@ def _parse_description(data: object) -> None | str | Unset: description = _parse_description(d.pop("description", UNSET)) - _frequency = d.pop("frequency", UNSET) frequency: ReminderFrequency | Unset - if isinstance(_frequency, Unset): + if isinstance(_frequency, Unset): frequency = UNSET else: frequency = ReminderFrequency(_frequency) - - - is_active = d.pop("is_active", UNSET) def _parse_contact_id(data: object) -> None | Unset | UUID: @@ -136,8 +114,6 @@ def _parse_contact_id(data: object) -> None | Unset | UUID: raise TypeError() contact_id_type_0 = UUID(data) - - return contact_id_type_0 except (TypeError, ValueError, AttributeError, KeyError): pass @@ -145,7 +121,6 @@ def _parse_contact_id(data: object) -> None | Unset | UUID: contact_id = _parse_contact_id(d.pop("contact_id", UNSET)) - reminder_create = cls( title=title, remind_at=remind_at, @@ -155,7 +130,6 @@ def _parse_contact_id(data: object) -> None | Unset | UUID: contact_id=contact_id, ) - reminder_create.additional_properties = d return reminder_create diff --git a/kindred-sdk/personal_crm_client/models/reminder_frequency.py b/kindred-sdk/personal_crm_client/models/reminder_frequency.py index 7bef71af..95cd26ac 100644 --- a/kindred-sdk/personal_crm_client/models/reminder_frequency.py +++ b/kindred-sdk/personal_crm_client/models/reminder_frequency.py @@ -1,5 +1,6 @@ from enum import Enum + class ReminderFrequency(str, Enum): DAILY = "daily" MONTHLY = "monthly" diff --git a/kindred-sdk/personal_crm_client/models/reminder_public.py b/kindred-sdk/personal_crm_client/models/reminder_public.py index 336c1f81..2a774ee8 100644 --- a/kindred-sdk/personal_crm_client/models/reminder_public.py +++ b/kindred-sdk/personal_crm_client/models/reminder_public.py @@ -1,44 +1,35 @@ from __future__ import annotations +import datetime from collections.abc import Mapping -from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator +from typing import Any, TypeVar, cast +from uuid import UUID from attrs import define as _attrs_define from attrs import field as _attrs_field - -from ..types import UNSET, Unset +from dateutil.parser import isoparse from ..models.reminder_frequency import ReminderFrequency from ..types import UNSET, Unset -from dateutil.parser import isoparse -from typing import cast -from uuid import UUID -import datetime - - - - - T = TypeVar("T", bound="ReminderPublic") - @_attrs_define class ReminderPublic: - """ - Attributes: - title (str): Reminder title. - remind_at (datetime.datetime): When to fire the reminder. - id (UUID): - contact_id (None | UUID): - last_sent_at (datetime.datetime | None): - snoozed_until (datetime.datetime | None): - created_at (datetime.datetime): - description (None | str | Unset): Extra details shown with the reminder. - frequency (ReminderFrequency | Unset): - is_active (bool | Unset): Enable or disable without deleting. Default: True. - """ + """ + Attributes: + title (str): Reminder title. + remind_at (datetime.datetime): When to fire the reminder. + id (UUID): + contact_id (None | UUID): + last_sent_at (datetime.datetime | None): + snoozed_until (datetime.datetime | None): + created_at (datetime.datetime): + description (None | str | Unset): Extra details shown with the reminder. + frequency (ReminderFrequency | Unset): + is_active (bool | Unset): Enable or disable without deleting. Default: True. + """ title: str remind_at: datetime.datetime @@ -52,10 +43,6 @@ class ReminderPublic: is_active: bool | Unset = True additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) - - - - def to_dict(self) -> dict[str, Any]: title = self.title @@ -93,21 +80,21 @@ def to_dict(self) -> dict[str, Any]: if not isinstance(self.frequency, Unset): frequency = self.frequency.value - is_active = self.is_active - field_dict: dict[str, Any] = {} field_dict.update(self.additional_properties) - field_dict.update({ - "title": title, - "remind_at": remind_at, - "id": id, - "contact_id": contact_id, - "last_sent_at": last_sent_at, - "snoozed_until": snoozed_until, - "created_at": created_at, - }) + field_dict.update( + { + "title": title, + "remind_at": remind_at, + "id": id, + "contact_id": contact_id, + "last_sent_at": last_sent_at, + "snoozed_until": snoozed_until, + "created_at": created_at, + } + ) if description is not UNSET: field_dict["description"] = description if frequency is not UNSET: @@ -117,8 +104,6 @@ def to_dict(self) -> dict[str, Any]: return field_dict - - @classmethod def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: d = dict(src_dict) @@ -126,14 +111,8 @@ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: remind_at = isoparse(d.pop("remind_at")) - - - id = UUID(d.pop("id")) - - - def _parse_contact_id(data: object) -> None | UUID: if data is None: return data @@ -142,8 +121,6 @@ def _parse_contact_id(data: object) -> None | UUID: raise TypeError() contact_id_type_0 = UUID(data) - - return contact_id_type_0 except (TypeError, ValueError, AttributeError, KeyError): pass @@ -151,7 +128,6 @@ def _parse_contact_id(data: object) -> None | UUID: contact_id = _parse_contact_id(d.pop("contact_id")) - def _parse_last_sent_at(data: object) -> datetime.datetime | None: if data is None: return data @@ -160,8 +136,6 @@ def _parse_last_sent_at(data: object) -> datetime.datetime | None: raise TypeError() last_sent_at_type_0 = isoparse(data) - - return last_sent_at_type_0 except (TypeError, ValueError, AttributeError, KeyError): pass @@ -169,7 +143,6 @@ def _parse_last_sent_at(data: object) -> datetime.datetime | None: last_sent_at = _parse_last_sent_at(d.pop("last_sent_at")) - def _parse_snoozed_until(data: object) -> datetime.datetime | None: if data is None: return data @@ -178,8 +151,6 @@ def _parse_snoozed_until(data: object) -> datetime.datetime | None: raise TypeError() snoozed_until_type_0 = isoparse(data) - - return snoozed_until_type_0 except (TypeError, ValueError, AttributeError, KeyError): pass @@ -187,12 +158,8 @@ def _parse_snoozed_until(data: object) -> datetime.datetime | None: snoozed_until = _parse_snoozed_until(d.pop("snoozed_until")) - created_at = isoparse(d.pop("created_at")) - - - def _parse_description(data: object) -> None | str | Unset: if data is None: return data @@ -202,17 +169,13 @@ def _parse_description(data: object) -> None | str | Unset: description = _parse_description(d.pop("description", UNSET)) - _frequency = d.pop("frequency", UNSET) frequency: ReminderFrequency | Unset - if isinstance(_frequency, Unset): + if isinstance(_frequency, Unset): frequency = UNSET else: frequency = ReminderFrequency(_frequency) - - - is_active = d.pop("is_active", UNSET) reminder_public = cls( @@ -228,7 +191,6 @@ def _parse_description(data: object) -> None | str | Unset: is_active=is_active, ) - reminder_public.additional_properties = d return reminder_public diff --git a/kindred-sdk/personal_crm_client/models/reminder_update.py b/kindred-sdk/personal_crm_client/models/reminder_update.py index bc38cff0..d4b6f9c8 100644 --- a/kindred-sdk/personal_crm_client/models/reminder_update.py +++ b/kindred-sdk/personal_crm_client/models/reminder_update.py @@ -1,38 +1,29 @@ from __future__ import annotations +import datetime from collections.abc import Mapping -from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator +from typing import Any, TypeVar, cast from attrs import define as _attrs_define from attrs import field as _attrs_field - -from ..types import UNSET, Unset +from dateutil.parser import isoparse from ..models.reminder_frequency import ReminderFrequency from ..types import UNSET, Unset -from dateutil.parser import isoparse -from typing import cast -import datetime - - - - - T = TypeVar("T", bound="ReminderUpdate") - @_attrs_define class ReminderUpdate: - """ - Attributes: - title (None | str | Unset): - description (None | str | Unset): - remind_at (datetime.datetime | None | Unset): - frequency (None | ReminderFrequency | Unset): - is_active (bool | None | Unset): - """ + """ + Attributes: + title (None | str | Unset): + description (None | str | Unset): + remind_at (datetime.datetime | None | Unset): + frequency (None | ReminderFrequency | Unset): + is_active (bool | None | Unset): + """ title: None | str | Unset = UNSET description: None | str | Unset = UNSET @@ -41,10 +32,6 @@ class ReminderUpdate: is_active: bool | None | Unset = UNSET additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) - - - - def to_dict(self) -> dict[str, Any]: title: None | str | Unset if isinstance(self.title, Unset): @@ -80,11 +67,9 @@ def to_dict(self) -> dict[str, Any]: else: is_active = self.is_active - field_dict: dict[str, Any] = {} field_dict.update(self.additional_properties) - field_dict.update({ - }) + field_dict.update({}) if title is not UNSET: field_dict["title"] = title if description is not UNSET: @@ -98,11 +83,10 @@ def to_dict(self) -> dict[str, Any]: return field_dict - - @classmethod def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: d = dict(src_dict) + def _parse_title(data: object) -> None | str | Unset: if data is None: return data @@ -112,7 +96,6 @@ def _parse_title(data: object) -> None | str | Unset: title = _parse_title(d.pop("title", UNSET)) - def _parse_description(data: object) -> None | str | Unset: if data is None: return data @@ -122,7 +105,6 @@ def _parse_description(data: object) -> None | str | Unset: description = _parse_description(d.pop("description", UNSET)) - def _parse_remind_at(data: object) -> datetime.datetime | None | Unset: if data is None: return data @@ -133,8 +115,6 @@ def _parse_remind_at(data: object) -> datetime.datetime | None | Unset: raise TypeError() remind_at_type_0 = isoparse(data) - - return remind_at_type_0 except (TypeError, ValueError, AttributeError, KeyError): pass @@ -142,7 +122,6 @@ def _parse_remind_at(data: object) -> datetime.datetime | None | Unset: remind_at = _parse_remind_at(d.pop("remind_at", UNSET)) - def _parse_frequency(data: object) -> None | ReminderFrequency | Unset: if data is None: return data @@ -153,8 +132,6 @@ def _parse_frequency(data: object) -> None | ReminderFrequency | Unset: raise TypeError() frequency_type_0 = ReminderFrequency(data) - - return frequency_type_0 except (TypeError, ValueError, AttributeError, KeyError): pass @@ -162,7 +139,6 @@ def _parse_frequency(data: object) -> None | ReminderFrequency | Unset: frequency = _parse_frequency(d.pop("frequency", UNSET)) - def _parse_is_active(data: object) -> bool | None | Unset: if data is None: return data @@ -172,7 +148,6 @@ def _parse_is_active(data: object) -> bool | None | Unset: is_active = _parse_is_active(d.pop("is_active", UNSET)) - reminder_update = cls( title=title, description=description, @@ -181,7 +156,6 @@ def _parse_is_active(data: object) -> bool | None | Unset: is_active=is_active, ) - reminder_update.additional_properties = d return reminder_update diff --git a/kindred-sdk/personal_crm_client/models/reminders_public.py b/kindred-sdk/personal_crm_client/models/reminders_public.py index 369b08ff..5c7a7842 100644 --- a/kindred-sdk/personal_crm_client/models/reminders_public.py +++ b/kindred-sdk/personal_crm_client/models/reminders_public.py @@ -1,79 +1,61 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator +from typing import TYPE_CHECKING, Any, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from ..types import UNSET, Unset - -from typing import cast - if TYPE_CHECKING: - from ..models.reminder_public import ReminderPublic - - - + from ..models.reminder_public import ReminderPublic T = TypeVar("T", bound="RemindersPublic") - @_attrs_define class RemindersPublic: - """ - Attributes: - data (list[ReminderPublic]): - count (int): - """ + """ + Attributes: + data (list[ReminderPublic]): + count (int): + """ data: list[ReminderPublic] count: int additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) - - - - def to_dict(self) -> dict[str, Any]: - from ..models.reminder_public import ReminderPublic data = [] for data_item_data in self.data: data_item = data_item_data.to_dict() data.append(data_item) - - count = self.count - field_dict: dict[str, Any] = {} field_dict.update(self.additional_properties) - field_dict.update({ - "data": data, - "count": count, - }) + field_dict.update( + { + "data": data, + "count": count, + } + ) return field_dict - - @classmethod def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: from ..models.reminder_public import ReminderPublic + d = dict(src_dict) data = [] _data = d.pop("data") - for data_item_data in (_data): + for data_item_data in _data: data_item = ReminderPublic.from_dict(data_item_data) - - data.append(data_item) - count = d.pop("count") reminders_public = cls( @@ -81,7 +63,6 @@ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: count=count, ) - reminders_public.additional_properties = d return reminders_public diff --git a/kindred-sdk/personal_crm_client/models/share_in.py b/kindred-sdk/personal_crm_client/models/share_in.py index a0e259c3..a63a4f7e 100644 --- a/kindred-sdk/personal_crm_client/models/share_in.py +++ b/kindred-sdk/personal_crm_client/models/share_in.py @@ -1,76 +1,55 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator +from typing import Any, TypeVar +from uuid import UUID from attrs import define as _attrs_define from attrs import field as _attrs_field -from ..types import UNSET, Unset - -from uuid import UUID - - - - - - T = TypeVar("T", bound="ShareIn") - @_attrs_define class ShareIn: - """ - Attributes: - tag_id (UUID): - grantee_id (UUID): - """ + """ + Attributes: + tag_id (UUID): + grantee_id (UUID): + """ tag_id: UUID grantee_id: UUID additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) - - - - def to_dict(self) -> dict[str, Any]: tag_id = str(self.tag_id) grantee_id = str(self.grantee_id) - field_dict: dict[str, Any] = {} field_dict.update(self.additional_properties) - field_dict.update({ - "tag_id": tag_id, - "grantee_id": grantee_id, - }) + field_dict.update( + { + "tag_id": tag_id, + "grantee_id": grantee_id, + } + ) return field_dict - - @classmethod def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: d = dict(src_dict) tag_id = UUID(d.pop("tag_id")) - - - grantee_id = UUID(d.pop("grantee_id")) - - - share_in = cls( tag_id=tag_id, grantee_id=grantee_id, ) - share_in.additional_properties = d return share_in diff --git a/kindred-sdk/personal_crm_client/models/tag_create.py b/kindred-sdk/personal_crm_client/models/tag_create.py index 7a4ace8d..021819f5 100644 --- a/kindred-sdk/personal_crm_client/models/tag_create.py +++ b/kindred-sdk/personal_crm_client/models/tag_create.py @@ -1,41 +1,28 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator +from typing import Any, TypeVar, cast from attrs import define as _attrs_define from attrs import field as _attrs_field from ..types import UNSET, Unset -from ..types import UNSET, Unset -from typing import cast - - - - - - T = TypeVar("T", bound="TagCreate") - @_attrs_define class TagCreate: - """ - Attributes: - name (str): Tag name, 1-100 chars. - color (None | str | Unset): Optional hex color like #ff0000 for UI display. - """ + """ + Attributes: + name (str): Tag name, 1-100 chars. + color (None | str | Unset): Optional hex color like #ff0000 for UI display. + """ name: str color: None | str | Unset = UNSET additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) - - - - def to_dict(self) -> dict[str, Any]: name = self.name @@ -45,19 +32,18 @@ def to_dict(self) -> dict[str, Any]: else: color = self.color - field_dict: dict[str, Any] = {} field_dict.update(self.additional_properties) - field_dict.update({ - "name": name, - }) + field_dict.update( + { + "name": name, + } + ) if color is not UNSET: field_dict["color"] = color return field_dict - - @classmethod def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: d = dict(src_dict) @@ -72,13 +58,11 @@ def _parse_color(data: object) -> None | str | Unset: color = _parse_color(d.pop("color", UNSET)) - tag_create = cls( name=name, color=color, ) - tag_create.additional_properties = d return tag_create diff --git a/kindred-sdk/personal_crm_client/models/tag_public.py b/kindred-sdk/personal_crm_client/models/tag_public.py index 7d236dd1..9a4937e8 100644 --- a/kindred-sdk/personal_crm_client/models/tag_public.py +++ b/kindred-sdk/personal_crm_client/models/tag_public.py @@ -1,37 +1,28 @@ from __future__ import annotations +import datetime from collections.abc import Mapping -from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator +from typing import Any, TypeVar, cast +from uuid import UUID from attrs import define as _attrs_define from attrs import field as _attrs_field - -from ..types import UNSET, Unset - -from ..types import UNSET, Unset from dateutil.parser import isoparse -from typing import cast -from uuid import UUID -import datetime - - - - +from ..types import UNSET, Unset T = TypeVar("T", bound="TagPublic") - @_attrs_define class TagPublic: - """ - Attributes: - name (str): Tag name, 1-100 chars. - id (UUID): - created_at (datetime.datetime): - color (None | str | Unset): Optional hex color like #ff0000 for UI display. - """ + """ + Attributes: + name (str): Tag name, 1-100 chars. + id (UUID): + created_at (datetime.datetime): + color (None | str | Unset): Optional hex color like #ff0000 for UI display. + """ name: str id: UUID @@ -39,10 +30,6 @@ class TagPublic: color: None | str | Unset = UNSET additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) - - - - def to_dict(self) -> dict[str, Any]: name = self.name @@ -56,21 +43,20 @@ def to_dict(self) -> dict[str, Any]: else: color = self.color - field_dict: dict[str, Any] = {} field_dict.update(self.additional_properties) - field_dict.update({ - "name": name, - "id": id, - "created_at": created_at, - }) + field_dict.update( + { + "name": name, + "id": id, + "created_at": created_at, + } + ) if color is not UNSET: field_dict["color"] = color return field_dict - - @classmethod def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: d = dict(src_dict) @@ -78,14 +64,8 @@ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: id = UUID(d.pop("id")) - - - created_at = isoparse(d.pop("created_at")) - - - def _parse_color(data: object) -> None | str | Unset: if data is None: return data @@ -95,7 +75,6 @@ def _parse_color(data: object) -> None | str | Unset: color = _parse_color(d.pop("color", UNSET)) - tag_public = cls( name=name, id=id, @@ -103,7 +82,6 @@ def _parse_color(data: object) -> None | str | Unset: color=color, ) - tag_public.additional_properties = d return tag_public diff --git a/kindred-sdk/personal_crm_client/models/tag_share_public.py b/kindred-sdk/personal_crm_client/models/tag_share_public.py index f8b7072e..2f9e308c 100644 --- a/kindred-sdk/personal_crm_client/models/tag_share_public.py +++ b/kindred-sdk/personal_crm_client/models/tag_share_public.py @@ -1,36 +1,26 @@ from __future__ import annotations +import datetime from collections.abc import Mapping -from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator +from typing import Any, TypeVar +from uuid import UUID from attrs import define as _attrs_define from attrs import field as _attrs_field - -from ..types import UNSET, Unset - from dateutil.parser import isoparse -from typing import cast -from uuid import UUID -import datetime - - - - - T = TypeVar("T", bound="TagSharePublic") - @_attrs_define class TagSharePublic: - """ - Attributes: - tag_id (UUID): - grantee_id (UUID): - grantee_email (str): - created_at (datetime.datetime): - """ + """ + Attributes: + tag_id (UUID): + grantee_id (UUID): + grantee_email (str): + created_at (datetime.datetime): + """ tag_id: UUID grantee_id: UUID @@ -38,10 +28,6 @@ class TagSharePublic: created_at: datetime.datetime additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) - - - - def to_dict(self) -> dict[str, Any]: tag_id = str(self.tag_id) @@ -51,40 +37,30 @@ def to_dict(self) -> dict[str, Any]: created_at = self.created_at.isoformat() - field_dict: dict[str, Any] = {} field_dict.update(self.additional_properties) - field_dict.update({ - "tag_id": tag_id, - "grantee_id": grantee_id, - "grantee_email": grantee_email, - "created_at": created_at, - }) + field_dict.update( + { + "tag_id": tag_id, + "grantee_id": grantee_id, + "grantee_email": grantee_email, + "created_at": created_at, + } + ) return field_dict - - @classmethod def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: d = dict(src_dict) tag_id = UUID(d.pop("tag_id")) - - - grantee_id = UUID(d.pop("grantee_id")) - - - grantee_email = d.pop("grantee_email") created_at = isoparse(d.pop("created_at")) - - - tag_share_public = cls( tag_id=tag_id, grantee_id=grantee_id, @@ -92,7 +68,6 @@ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: created_at=created_at, ) - tag_share_public.additional_properties = d return tag_share_public diff --git a/kindred-sdk/personal_crm_client/models/tag_shares_delete_tag_share_response_tag_shares_delete_tag_share.py b/kindred-sdk/personal_crm_client/models/tag_shares_delete_tag_share_response_tag_shares_delete_tag_share.py index d1789a31..70823429 100644 --- a/kindred-sdk/personal_crm_client/models/tag_shares_delete_tag_share_response_tag_shares_delete_tag_share.py +++ b/kindred-sdk/personal_crm_client/models/tag_shares_delete_tag_share_response_tag_shares_delete_tag_share.py @@ -1,49 +1,30 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator +from typing import Any, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from ..types import UNSET, Unset - - - - - - - T = TypeVar("T", bound="TagSharesDeleteTagShareResponseTagSharesDeleteTagShare") - @_attrs_define class TagSharesDeleteTagShareResponseTagSharesDeleteTagShare: - """ - """ + """ """ additional_properties: dict[str, str] = _attrs_field(init=False, factory=dict) - - - - def to_dict(self) -> dict[str, Any]: - field_dict: dict[str, Any] = {} field_dict.update(self.additional_properties) return field_dict - - @classmethod def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: d = dict(src_dict) - tag_shares_delete_tag_share_response_tag_shares_delete_tag_share = cls( - ) - + tag_shares_delete_tag_share_response_tag_shares_delete_tag_share = cls() tag_shares_delete_tag_share_response_tag_shares_delete_tag_share.additional_properties = d return tag_shares_delete_tag_share_response_tag_shares_delete_tag_share diff --git a/kindred-sdk/personal_crm_client/models/tag_shares_public.py b/kindred-sdk/personal_crm_client/models/tag_shares_public.py index 80a0da0d..7d936005 100644 --- a/kindred-sdk/personal_crm_client/models/tag_shares_public.py +++ b/kindred-sdk/personal_crm_client/models/tag_shares_public.py @@ -1,79 +1,61 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator +from typing import TYPE_CHECKING, Any, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from ..types import UNSET, Unset - -from typing import cast - if TYPE_CHECKING: - from ..models.tag_share_public import TagSharePublic - - - + from ..models.tag_share_public import TagSharePublic T = TypeVar("T", bound="TagSharesPublic") - @_attrs_define class TagSharesPublic: - """ - Attributes: - data (list[TagSharePublic]): - count (int): - """ + """ + Attributes: + data (list[TagSharePublic]): + count (int): + """ data: list[TagSharePublic] count: int additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) - - - - def to_dict(self) -> dict[str, Any]: - from ..models.tag_share_public import TagSharePublic data = [] for data_item_data in self.data: data_item = data_item_data.to_dict() data.append(data_item) - - count = self.count - field_dict: dict[str, Any] = {} field_dict.update(self.additional_properties) - field_dict.update({ - "data": data, - "count": count, - }) + field_dict.update( + { + "data": data, + "count": count, + } + ) return field_dict - - @classmethod def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: from ..models.tag_share_public import TagSharePublic + d = dict(src_dict) data = [] _data = d.pop("data") - for data_item_data in (_data): + for data_item_data in _data: data_item = TagSharePublic.from_dict(data_item_data) - - data.append(data_item) - count = d.pop("count") tag_shares_public = cls( @@ -81,7 +63,6 @@ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: count=count, ) - tag_shares_public.additional_properties = d return tag_shares_public diff --git a/kindred-sdk/personal_crm_client/models/tag_update.py b/kindred-sdk/personal_crm_client/models/tag_update.py index 507702ea..22e001b8 100644 --- a/kindred-sdk/personal_crm_client/models/tag_update.py +++ b/kindred-sdk/personal_crm_client/models/tag_update.py @@ -1,41 +1,28 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator +from typing import Any, TypeVar, cast from attrs import define as _attrs_define from attrs import field as _attrs_field from ..types import UNSET, Unset -from ..types import UNSET, Unset -from typing import cast - - - - - - T = TypeVar("T", bound="TagUpdate") - @_attrs_define class TagUpdate: - """ - Attributes: - name (None | str | Unset): - color (None | str | Unset): - """ + """ + Attributes: + name (None | str | Unset): + color (None | str | Unset): + """ name: None | str | Unset = UNSET color: None | str | Unset = UNSET additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) - - - - def to_dict(self) -> dict[str, Any]: name: None | str | Unset if isinstance(self.name, Unset): @@ -49,11 +36,9 @@ def to_dict(self) -> dict[str, Any]: else: color = self.color - field_dict: dict[str, Any] = {} field_dict.update(self.additional_properties) - field_dict.update({ - }) + field_dict.update({}) if name is not UNSET: field_dict["name"] = name if color is not UNSET: @@ -61,11 +46,10 @@ def to_dict(self) -> dict[str, Any]: return field_dict - - @classmethod def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: d = dict(src_dict) + def _parse_name(data: object) -> None | str | Unset: if data is None: return data @@ -75,7 +59,6 @@ def _parse_name(data: object) -> None | str | Unset: name = _parse_name(d.pop("name", UNSET)) - def _parse_color(data: object) -> None | str | Unset: if data is None: return data @@ -85,13 +68,11 @@ def _parse_color(data: object) -> None | str | Unset: color = _parse_color(d.pop("color", UNSET)) - tag_update = cls( name=name, color=color, ) - tag_update.additional_properties = d return tag_update diff --git a/kindred-sdk/personal_crm_client/models/tags_public.py b/kindred-sdk/personal_crm_client/models/tags_public.py index 13c72935..9ce2b3b8 100644 --- a/kindred-sdk/personal_crm_client/models/tags_public.py +++ b/kindred-sdk/personal_crm_client/models/tags_public.py @@ -1,79 +1,61 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator +from typing import TYPE_CHECKING, Any, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from ..types import UNSET, Unset - -from typing import cast - if TYPE_CHECKING: - from ..models.tag_public import TagPublic - - - + from ..models.tag_public import TagPublic T = TypeVar("T", bound="TagsPublic") - @_attrs_define class TagsPublic: - """ - Attributes: - data (list[TagPublic]): - count (int): - """ + """ + Attributes: + data (list[TagPublic]): + count (int): + """ data: list[TagPublic] count: int additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) - - - - def to_dict(self) -> dict[str, Any]: - from ..models.tag_public import TagPublic data = [] for data_item_data in self.data: data_item = data_item_data.to_dict() data.append(data_item) - - count = self.count - field_dict: dict[str, Any] = {} field_dict.update(self.additional_properties) - field_dict.update({ - "data": data, - "count": count, - }) + field_dict.update( + { + "data": data, + "count": count, + } + ) return field_dict - - @classmethod def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: from ..models.tag_public import TagPublic + d = dict(src_dict) data = [] _data = d.pop("data") - for data_item_data in (_data): + for data_item_data in _data: data_item = TagPublic.from_dict(data_item_data) - - data.append(data_item) - count = d.pop("count") tags_public = cls( @@ -81,7 +63,6 @@ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: count=count, ) - tags_public.additional_properties = d return tags_public diff --git a/kindred-sdk/personal_crm_client/models/token.py b/kindred-sdk/personal_crm_client/models/token.py index b79bdd0b..ba5c9088 100644 --- a/kindred-sdk/personal_crm_client/models/token.py +++ b/kindred-sdk/personal_crm_client/models/token.py @@ -1,58 +1,45 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator +from typing import Any, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field from ..types import UNSET, Unset -from ..types import UNSET, Unset - - - - - - T = TypeVar("T", bound="Token") - @_attrs_define class Token: - """ - Attributes: - access_token (str): - token_type (str | Unset): Default: 'bearer'. - """ + """ + Attributes: + access_token (str): + token_type (str | Unset): Default: 'bearer'. + """ access_token: str - token_type: str | Unset = 'bearer' + token_type: str | Unset = "bearer" additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) - - - - def to_dict(self) -> dict[str, Any]: access_token = self.access_token token_type = self.token_type - field_dict: dict[str, Any] = {} field_dict.update(self.additional_properties) - field_dict.update({ - "access_token": access_token, - }) + field_dict.update( + { + "access_token": access_token, + } + ) if token_type is not UNSET: field_dict["token_type"] = token_type return field_dict - - @classmethod def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: d = dict(src_dict) @@ -65,7 +52,6 @@ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: token_type=token_type, ) - token.additional_properties = d return token diff --git a/kindred-sdk/personal_crm_client/models/update_password.py b/kindred-sdk/personal_crm_client/models/update_password.py index 0119b5d7..1b0054d5 100644 --- a/kindred-sdk/personal_crm_client/models/update_password.py +++ b/kindred-sdk/personal_crm_client/models/update_password.py @@ -1,56 +1,42 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator +from typing import Any, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from ..types import UNSET, Unset - - - - - - - T = TypeVar("T", bound="UpdatePassword") - @_attrs_define class UpdatePassword: - """ - Attributes: - current_password (str): - new_password (str): - """ + """ + Attributes: + current_password (str): + new_password (str): + """ current_password: str new_password: str additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) - - - - def to_dict(self) -> dict[str, Any]: current_password = self.current_password new_password = self.new_password - field_dict: dict[str, Any] = {} field_dict.update(self.additional_properties) - field_dict.update({ - "current_password": current_password, - "new_password": new_password, - }) + field_dict.update( + { + "current_password": current_password, + "new_password": new_password, + } + ) return field_dict - - @classmethod def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: d = dict(src_dict) @@ -63,7 +49,6 @@ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: new_password=new_password, ) - update_password.additional_properties = d return update_password diff --git a/kindred-sdk/personal_crm_client/models/user_create.py b/kindred-sdk/personal_crm_client/models/user_create.py index 8346c605..375004e9 100644 --- a/kindred-sdk/personal_crm_client/models/user_create.py +++ b/kindred-sdk/personal_crm_client/models/user_create.py @@ -1,35 +1,26 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator +from typing import Any, TypeVar, cast from attrs import define as _attrs_define from attrs import field as _attrs_field from ..types import UNSET, Unset -from ..types import UNSET, Unset -from typing import cast - - - - - - T = TypeVar("T", bound="UserCreate") - @_attrs_define class UserCreate: - """ - Attributes: - email (str): Login email; must be unique. - password (str): - is_active (bool | Unset): Whether the account can log in. Default: True. - is_superuser (bool | Unset): Grants admin-only endpoints. Default: False. - full_name (None | str | Unset): Display name; optional. - """ + """ + Attributes: + email (str): Login email; must be unique. + password (str): + is_active (bool | Unset): Whether the account can log in. Default: True. + is_superuser (bool | Unset): Grants admin-only endpoints. Default: False. + full_name (None | str | Unset): Display name; optional. + """ email: str password: str @@ -38,10 +29,6 @@ class UserCreate: full_name: None | str | Unset = UNSET additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) - - - - def to_dict(self) -> dict[str, Any]: email = self.email @@ -57,13 +44,14 @@ def to_dict(self) -> dict[str, Any]: else: full_name = self.full_name - field_dict: dict[str, Any] = {} field_dict.update(self.additional_properties) - field_dict.update({ - "email": email, - "password": password, - }) + field_dict.update( + { + "email": email, + "password": password, + } + ) if is_active is not UNSET: field_dict["is_active"] = is_active if is_superuser is not UNSET: @@ -73,8 +61,6 @@ def to_dict(self) -> dict[str, Any]: return field_dict - - @classmethod def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: d = dict(src_dict) @@ -95,7 +81,6 @@ def _parse_full_name(data: object) -> None | str | Unset: full_name = _parse_full_name(d.pop("full_name", UNSET)) - user_create = cls( email=email, password=password, @@ -104,7 +89,6 @@ def _parse_full_name(data: object) -> None | str | Unset: full_name=full_name, ) - user_create.additional_properties = d return user_create diff --git a/kindred-sdk/personal_crm_client/models/user_public.py b/kindred-sdk/personal_crm_client/models/user_public.py index d082f6aa..add11f5c 100644 --- a/kindred-sdk/personal_crm_client/models/user_public.py +++ b/kindred-sdk/personal_crm_client/models/user_public.py @@ -1,39 +1,30 @@ from __future__ import annotations +import datetime from collections.abc import Mapping -from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator +from typing import Any, TypeVar, cast +from uuid import UUID from attrs import define as _attrs_define from attrs import field as _attrs_field - -from ..types import UNSET, Unset - -from ..types import UNSET, Unset from dateutil.parser import isoparse -from typing import cast -from uuid import UUID -import datetime - - - - +from ..types import UNSET, Unset T = TypeVar("T", bound="UserPublic") - @_attrs_define class UserPublic: - """ - Attributes: - email (str): Login email; must be unique. - id (UUID): - is_active (bool | Unset): Whether the account can log in. Default: True. - is_superuser (bool | Unset): Grants admin-only endpoints. Default: False. - full_name (None | str | Unset): Display name; optional. - created_at (datetime.datetime | None | Unset): - """ + """ + Attributes: + email (str): Login email; must be unique. + id (UUID): + is_active (bool | Unset): Whether the account can log in. Default: True. + is_superuser (bool | Unset): Grants admin-only endpoints. Default: False. + full_name (None | str | Unset): Display name; optional. + created_at (datetime.datetime | None | Unset): + """ email: str id: UUID @@ -43,10 +34,6 @@ class UserPublic: created_at: datetime.datetime | None | Unset = UNSET additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) - - - - def to_dict(self) -> dict[str, Any]: email = self.email @@ -70,13 +57,14 @@ def to_dict(self) -> dict[str, Any]: else: created_at = self.created_at - field_dict: dict[str, Any] = {} field_dict.update(self.additional_properties) - field_dict.update({ - "email": email, - "id": id, - }) + field_dict.update( + { + "email": email, + "id": id, + } + ) if is_active is not UNSET: field_dict["is_active"] = is_active if is_superuser is not UNSET: @@ -88,8 +76,6 @@ def to_dict(self) -> dict[str, Any]: return field_dict - - @classmethod def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: d = dict(src_dict) @@ -97,9 +83,6 @@ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: id = UUID(d.pop("id")) - - - is_active = d.pop("is_active", UNSET) is_superuser = d.pop("is_superuser", UNSET) @@ -113,7 +96,6 @@ def _parse_full_name(data: object) -> None | str | Unset: full_name = _parse_full_name(d.pop("full_name", UNSET)) - def _parse_created_at(data: object) -> datetime.datetime | None | Unset: if data is None: return data @@ -124,8 +106,6 @@ def _parse_created_at(data: object) -> datetime.datetime | None | Unset: raise TypeError() created_at_type_0 = isoparse(data) - - return created_at_type_0 except (TypeError, ValueError, AttributeError, KeyError): pass @@ -133,7 +113,6 @@ def _parse_created_at(data: object) -> datetime.datetime | None | Unset: created_at = _parse_created_at(d.pop("created_at", UNSET)) - user_public = cls( email=email, id=id, @@ -143,7 +122,6 @@ def _parse_created_at(data: object) -> datetime.datetime | None | Unset: created_at=created_at, ) - user_public.additional_properties = d return user_public diff --git a/kindred-sdk/personal_crm_client/models/user_register.py b/kindred-sdk/personal_crm_client/models/user_register.py index 6322e761..9a3ce519 100644 --- a/kindred-sdk/personal_crm_client/models/user_register.py +++ b/kindred-sdk/personal_crm_client/models/user_register.py @@ -1,43 +1,30 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator +from typing import Any, TypeVar, cast from attrs import define as _attrs_define from attrs import field as _attrs_field from ..types import UNSET, Unset -from ..types import UNSET, Unset -from typing import cast - - - - - - T = TypeVar("T", bound="UserRegister") - @_attrs_define class UserRegister: - """ - Attributes: - email (str): - password (str): - full_name (None | str | Unset): - """ + """ + Attributes: + email (str): + password (str): + full_name (None | str | Unset): + """ email: str password: str full_name: None | str | Unset = UNSET additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) - - - - def to_dict(self) -> dict[str, Any]: email = self.email @@ -49,20 +36,19 @@ def to_dict(self) -> dict[str, Any]: else: full_name = self.full_name - field_dict: dict[str, Any] = {} field_dict.update(self.additional_properties) - field_dict.update({ - "email": email, - "password": password, - }) + field_dict.update( + { + "email": email, + "password": password, + } + ) if full_name is not UNSET: field_dict["full_name"] = full_name return field_dict - - @classmethod def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: d = dict(src_dict) @@ -79,14 +65,12 @@ def _parse_full_name(data: object) -> None | str | Unset: full_name = _parse_full_name(d.pop("full_name", UNSET)) - user_register = cls( email=email, password=password, full_name=full_name, ) - user_register.additional_properties = d return user_register diff --git a/kindred-sdk/personal_crm_client/models/user_update.py b/kindred-sdk/personal_crm_client/models/user_update.py index 8b52c12f..2154be79 100644 --- a/kindred-sdk/personal_crm_client/models/user_update.py +++ b/kindred-sdk/personal_crm_client/models/user_update.py @@ -1,35 +1,26 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator +from typing import Any, TypeVar, cast from attrs import define as _attrs_define from attrs import field as _attrs_field from ..types import UNSET, Unset -from ..types import UNSET, Unset -from typing import cast - - - - - - T = TypeVar("T", bound="UserUpdate") - @_attrs_define class UserUpdate: - """ - Attributes: - email (None | str | Unset): - is_active (bool | Unset): Whether the account can log in. Default: True. - is_superuser (bool | Unset): Grants admin-only endpoints. Default: False. - full_name (None | str | Unset): Display name; optional. - password (None | str | Unset): - """ + """ + Attributes: + email (None | str | Unset): + is_active (bool | Unset): Whether the account can log in. Default: True. + is_superuser (bool | Unset): Grants admin-only endpoints. Default: False. + full_name (None | str | Unset): Display name; optional. + password (None | str | Unset): + """ email: None | str | Unset = UNSET is_active: bool | Unset = True @@ -38,10 +29,6 @@ class UserUpdate: password: None | str | Unset = UNSET additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) - - - - def to_dict(self) -> dict[str, Any]: email: None | str | Unset if isinstance(self.email, Unset): @@ -65,11 +52,9 @@ def to_dict(self) -> dict[str, Any]: else: password = self.password - field_dict: dict[str, Any] = {} field_dict.update(self.additional_properties) - field_dict.update({ - }) + field_dict.update({}) if email is not UNSET: field_dict["email"] = email if is_active is not UNSET: @@ -83,11 +68,10 @@ def to_dict(self) -> dict[str, Any]: return field_dict - - @classmethod def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: d = dict(src_dict) + def _parse_email(data: object) -> None | str | Unset: if data is None: return data @@ -97,7 +81,6 @@ def _parse_email(data: object) -> None | str | Unset: email = _parse_email(d.pop("email", UNSET)) - is_active = d.pop("is_active", UNSET) is_superuser = d.pop("is_superuser", UNSET) @@ -111,7 +94,6 @@ def _parse_full_name(data: object) -> None | str | Unset: full_name = _parse_full_name(d.pop("full_name", UNSET)) - def _parse_password(data: object) -> None | str | Unset: if data is None: return data @@ -121,7 +103,6 @@ def _parse_password(data: object) -> None | str | Unset: password = _parse_password(d.pop("password", UNSET)) - user_update = cls( email=email, is_active=is_active, @@ -130,7 +111,6 @@ def _parse_password(data: object) -> None | str | Unset: password=password, ) - user_update.additional_properties = d return user_update diff --git a/kindred-sdk/personal_crm_client/models/user_update_me.py b/kindred-sdk/personal_crm_client/models/user_update_me.py index 7c9e842c..1933df53 100644 --- a/kindred-sdk/personal_crm_client/models/user_update_me.py +++ b/kindred-sdk/personal_crm_client/models/user_update_me.py @@ -1,41 +1,28 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator +from typing import Any, TypeVar, cast from attrs import define as _attrs_define from attrs import field as _attrs_field from ..types import UNSET, Unset -from ..types import UNSET, Unset -from typing import cast - - - - - - T = TypeVar("T", bound="UserUpdateMe") - @_attrs_define class UserUpdateMe: - """ - Attributes: - full_name (None | str | Unset): - email (None | str | Unset): - """ + """ + Attributes: + full_name (None | str | Unset): + email (None | str | Unset): + """ full_name: None | str | Unset = UNSET email: None | str | Unset = UNSET additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) - - - - def to_dict(self) -> dict[str, Any]: full_name: None | str | Unset if isinstance(self.full_name, Unset): @@ -49,11 +36,9 @@ def to_dict(self) -> dict[str, Any]: else: email = self.email - field_dict: dict[str, Any] = {} field_dict.update(self.additional_properties) - field_dict.update({ - }) + field_dict.update({}) if full_name is not UNSET: field_dict["full_name"] = full_name if email is not UNSET: @@ -61,11 +46,10 @@ def to_dict(self) -> dict[str, Any]: return field_dict - - @classmethod def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: d = dict(src_dict) + def _parse_full_name(data: object) -> None | str | Unset: if data is None: return data @@ -75,7 +59,6 @@ def _parse_full_name(data: object) -> None | str | Unset: full_name = _parse_full_name(d.pop("full_name", UNSET)) - def _parse_email(data: object) -> None | str | Unset: if data is None: return data @@ -85,13 +68,11 @@ def _parse_email(data: object) -> None | str | Unset: email = _parse_email(d.pop("email", UNSET)) - user_update_me = cls( full_name=full_name, email=email, ) - user_update_me.additional_properties = d return user_update_me diff --git a/kindred-sdk/personal_crm_client/models/users_public.py b/kindred-sdk/personal_crm_client/models/users_public.py index 9271a73d..a468e26e 100644 --- a/kindred-sdk/personal_crm_client/models/users_public.py +++ b/kindred-sdk/personal_crm_client/models/users_public.py @@ -1,79 +1,61 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator +from typing import TYPE_CHECKING, Any, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from ..types import UNSET, Unset - -from typing import cast - if TYPE_CHECKING: - from ..models.user_public import UserPublic - - - + from ..models.user_public import UserPublic T = TypeVar("T", bound="UsersPublic") - @_attrs_define class UsersPublic: - """ - Attributes: - data (list[UserPublic]): - count (int): - """ + """ + Attributes: + data (list[UserPublic]): + count (int): + """ data: list[UserPublic] count: int additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) - - - - def to_dict(self) -> dict[str, Any]: - from ..models.user_public import UserPublic data = [] for data_item_data in self.data: data_item = data_item_data.to_dict() data.append(data_item) - - count = self.count - field_dict: dict[str, Any] = {} field_dict.update(self.additional_properties) - field_dict.update({ - "data": data, - "count": count, - }) + field_dict.update( + { + "data": data, + "count": count, + } + ) return field_dict - - @classmethod def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: from ..models.user_public import UserPublic + d = dict(src_dict) data = [] _data = d.pop("data") - for data_item_data in (_data): + for data_item_data in _data: data_item = UserPublic.from_dict(data_item_data) - - data.append(data_item) - count = d.pop("count") users_public = cls( @@ -81,7 +63,6 @@ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: count=count, ) - users_public.additional_properties = d return users_public diff --git a/kindred-sdk/personal_crm_client/models/validation_error.py b/kindred-sdk/personal_crm_client/models/validation_error.py index 2769a32e..6df5a458 100644 --- a/kindred-sdk/personal_crm_client/models/validation_error.py +++ b/kindred-sdk/personal_crm_client/models/validation_error.py @@ -1,37 +1,30 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator +from typing import TYPE_CHECKING, Any, TypeVar, cast from attrs import define as _attrs_define from attrs import field as _attrs_field from ..types import UNSET, Unset -from ..types import UNSET, Unset -from typing import cast - if TYPE_CHECKING: - from ..models.validation_error_context import ValidationErrorContext - - - + from ..models.validation_error_context import ValidationErrorContext T = TypeVar("T", bound="ValidationError") - @_attrs_define class ValidationError: - """ - Attributes: - loc (list[int | str]): - msg (str): - type_ (str): - input_ (Any | Unset): - ctx (ValidationErrorContext | Unset): - """ + """ + Attributes: + loc (list[int | str]): + msg (str): + type_ (str): + input_ (Any | Unset): + ctx (ValidationErrorContext | Unset): + """ loc: list[int | str] msg: str @@ -40,20 +33,13 @@ class ValidationError: ctx: ValidationErrorContext | Unset = UNSET additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) - - - - def to_dict(self) -> dict[str, Any]: - from ..models.validation_error_context import ValidationErrorContext loc = [] for loc_item_data in self.loc: loc_item: int | str loc_item = loc_item_data loc.append(loc_item) - - msg = self.msg type_ = self.type_ @@ -64,14 +50,15 @@ def to_dict(self) -> dict[str, Any]: if not isinstance(self.ctx, Unset): ctx = self.ctx.to_dict() - field_dict: dict[str, Any] = {} field_dict.update(self.additional_properties) - field_dict.update({ - "loc": loc, - "msg": msg, - "type": type_, - }) + field_dict.update( + { + "loc": loc, + "msg": msg, + "type": type_, + } + ) if input_ is not UNSET: field_dict["input"] = input_ if ctx is not UNSET: @@ -79,15 +66,15 @@ def to_dict(self) -> dict[str, Any]: return field_dict - - @classmethod def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: from ..models.validation_error_context import ValidationErrorContext + d = dict(src_dict) loc = [] _loc = d.pop("loc") - for loc_item_data in (_loc): + for loc_item_data in _loc: + def _parse_loc_item(data: object) -> int | str: return cast(int | str, data) @@ -95,7 +82,6 @@ def _parse_loc_item(data: object) -> int | str: loc.append(loc_item) - msg = d.pop("msg") type_ = d.pop("type") @@ -104,14 +90,11 @@ def _parse_loc_item(data: object) -> int | str: _ctx = d.pop("ctx", UNSET) ctx: ValidationErrorContext | Unset - if isinstance(_ctx, Unset): + if isinstance(_ctx, Unset): ctx = UNSET else: ctx = ValidationErrorContext.from_dict(_ctx) - - - validation_error = cls( loc=loc, msg=msg, @@ -120,7 +103,6 @@ def _parse_loc_item(data: object) -> int | str: ctx=ctx, ) - validation_error.additional_properties = d return validation_error diff --git a/kindred-sdk/personal_crm_client/models/validation_error_context.py b/kindred-sdk/personal_crm_client/models/validation_error_context.py index 7a2888d8..cfaf7b06 100644 --- a/kindred-sdk/personal_crm_client/models/validation_error_context.py +++ b/kindred-sdk/personal_crm_client/models/validation_error_context.py @@ -1,49 +1,30 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator +from typing import Any, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from ..types import UNSET, Unset - - - - - - - T = TypeVar("T", bound="ValidationErrorContext") - @_attrs_define class ValidationErrorContext: - """ - """ + """ """ additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) - - - - def to_dict(self) -> dict[str, Any]: - field_dict: dict[str, Any] = {} field_dict.update(self.additional_properties) return field_dict - - @classmethod def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: d = dict(src_dict) - validation_error_context = cls( - ) - + validation_error_context = cls() validation_error_context.additional_properties = d return validation_error_context diff --git a/kindred-sdk/personal_crm_client/models/webhook_endpoint_base.py b/kindred-sdk/personal_crm_client/models/webhook_endpoint_base.py index 7cd13471..c976f5fa 100644 --- a/kindred-sdk/personal_crm_client/models/webhook_endpoint_base.py +++ b/kindred-sdk/personal_crm_client/models/webhook_endpoint_base.py @@ -1,36 +1,27 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator +from typing import Any, TypeVar, cast from attrs import define as _attrs_define from attrs import field as _attrs_field from ..types import UNSET, Unset -from ..types import UNSET, Unset -from typing import cast - - - - - - T = TypeVar("T", bound="WebhookEndpointBase") - @_attrs_define class WebhookEndpointBase: - """ - Attributes: - name (str): Human-readable endpoint name. - direction (str): "inbound" or "outbound". - url (None | str | Unset): Target URL for outbound webhooks; null for inbound. - event_types (None | str | Unset): Comma-separated event types (e.g. contact.created,interaction.logged). - is_active (bool | Unset): Enable or disable without deleting. Default: True. - secret (None | str | Unset): HMAC secret for verifying inbound payloads. - """ + """ + Attributes: + name (str): Human-readable endpoint name. + direction (str): "inbound" or "outbound". + url (None | str | Unset): Target URL for outbound webhooks; null for inbound. + event_types (None | str | Unset): Comma-separated event types (e.g. contact.created,interaction.logged). + is_active (bool | Unset): Enable or disable without deleting. Default: True. + secret (None | str | Unset): HMAC secret for verifying inbound payloads. + """ name: str direction: str @@ -40,10 +31,6 @@ class WebhookEndpointBase: secret: None | str | Unset = UNSET additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) - - - - def to_dict(self) -> dict[str, Any]: name = self.name @@ -69,13 +56,14 @@ def to_dict(self) -> dict[str, Any]: else: secret = self.secret - field_dict: dict[str, Any] = {} field_dict.update(self.additional_properties) - field_dict.update({ - "name": name, - "direction": direction, - }) + field_dict.update( + { + "name": name, + "direction": direction, + } + ) if url is not UNSET: field_dict["url"] = url if event_types is not UNSET: @@ -87,8 +75,6 @@ def to_dict(self) -> dict[str, Any]: return field_dict - - @classmethod def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: d = dict(src_dict) @@ -105,7 +91,6 @@ def _parse_url(data: object) -> None | str | Unset: url = _parse_url(d.pop("url", UNSET)) - def _parse_event_types(data: object) -> None | str | Unset: if data is None: return data @@ -115,7 +100,6 @@ def _parse_event_types(data: object) -> None | str | Unset: event_types = _parse_event_types(d.pop("event_types", UNSET)) - is_active = d.pop("is_active", UNSET) def _parse_secret(data: object) -> None | str | Unset: @@ -127,7 +111,6 @@ def _parse_secret(data: object) -> None | str | Unset: secret = _parse_secret(d.pop("secret", UNSET)) - webhook_endpoint_base = cls( name=name, direction=direction, @@ -137,7 +120,6 @@ def _parse_secret(data: object) -> None | str | Unset: secret=secret, ) - webhook_endpoint_base.additional_properties = d return webhook_endpoint_base diff --git a/kindred-sdk/personal_crm_client/models/webhooks_inbound_webhook_payload.py b/kindred-sdk/personal_crm_client/models/webhooks_inbound_webhook_payload.py index fafaf196..c6ae7ecb 100644 --- a/kindred-sdk/personal_crm_client/models/webhooks_inbound_webhook_payload.py +++ b/kindred-sdk/personal_crm_client/models/webhooks_inbound_webhook_payload.py @@ -1,49 +1,30 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator +from typing import Any, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from ..types import UNSET, Unset - - - - - - - T = TypeVar("T", bound="WebhooksInboundWebhookPayload") - @_attrs_define class WebhooksInboundWebhookPayload: - """ - """ + """ """ additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) - - - - def to_dict(self) -> dict[str, Any]: - field_dict: dict[str, Any] = {} field_dict.update(self.additional_properties) return field_dict - - @classmethod def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: d = dict(src_dict) - webhooks_inbound_webhook_payload = cls( - ) - + webhooks_inbound_webhook_payload = cls() webhooks_inbound_webhook_payload.additional_properties = d return webhooks_inbound_webhook_payload diff --git a/kindred-sdk/personal_crm_client/py.typed b/kindred-sdk/personal_crm_client/py.typed index 1aad3271..7632ecf7 100644 --- a/kindred-sdk/personal_crm_client/py.typed +++ b/kindred-sdk/personal_crm_client/py.typed @@ -1 +1 @@ -# Marker file for PEP 561 \ No newline at end of file +# Marker file for PEP 561 diff --git a/kindred-sdk/personal_crm_client/types.py b/kindred-sdk/personal_crm_client/types.py index f74db0ad..b64af095 100644 --- a/kindred-sdk/personal_crm_client/types.py +++ b/kindred-sdk/personal_crm_client/types.py @@ -1,8 +1,8 @@ -""" Contains some shared types for properties """ +"""Contains some shared types for properties""" from collections.abc import Mapping, MutableMapping from http import HTTPStatus -from typing import BinaryIO, Generic, TypeVar, Literal, IO +from typing import IO, BinaryIO, Generic, Literal, TypeVar from attrs import define @@ -24,16 +24,17 @@ def __bool__(self) -> Literal[False]: ) RequestFiles = list[tuple[str, FileTypes]] + @define class File: - """ Contains information for file uploads """ + """Contains information for file uploads""" payload: BinaryIO file_name: str | None = None mime_type: str | None = None def to_tuple(self) -> FileTypes: - """ Return a tuple representation that httpx will accept for multipart/form-data """ + """Return a tuple representation that httpx will accept for multipart/form-data""" return self.file_name, self.payload, self.mime_type @@ -42,7 +43,7 @@ def to_tuple(self) -> FileTypes: @define class Response(Generic[T]): - """ A response from an endpoint """ + """A response from an endpoint""" status_code: HTTPStatus content: bytes diff --git a/openapi.json b/openapi.json deleted file mode 100644 index 8a7ce451..00000000 --- a/openapi.json +++ /dev/null @@ -1 +0,0 @@ -{"openapi":"3.1.0","info":{"title":"Personal CRM","version":"0.1.0"},"paths":{"/.well-known/carddav":{"get":{"tags":["carddav"],"summary":"Well Known Carddav","description":"Redirect to CardDAV server for iOS/macOS client discovery.","operationId":"carddav-well_known_carddav","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/login/access-token":{"post":{"tags":["login"],"summary":"Login Access Token","description":"OAuth2 compatible token login, get an access token for future requests","operationId":"login-login_access_token","requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_login-login_access_token"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Token"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/login/test-token":{"post":{"tags":["login"],"summary":"Test Token","description":"Test access token","operationId":"login-test_token","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserPublic"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/v1/password-recovery/{email}":{"post":{"tags":["login"],"summary":"Recover Password","description":"Password Recovery","operationId":"login-recover_password","parameters":[{"name":"email","in":"path","required":true,"schema":{"type":"string","title":"Email"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Message"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/reset-password/":{"post":{"tags":["login"],"summary":"Reset Password","description":"Reset password","operationId":"login-reset_password","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NewPassword"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Message"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/password-recovery-html-content/{email}":{"post":{"tags":["login"],"summary":"Recover Password Html Content","description":"HTML Content for Password Recovery","operationId":"login-recover_password_html_content","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"email","in":"path","required":true,"schema":{"type":"string","title":"Email"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/users/":{"get":{"tags":["users"],"summary":"Read Users","description":"Retrieve users.","operationId":"users-read_users","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"skip","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Skip"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UsersPublic"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["users"],"summary":"Create User","description":"Create new user.","operationId":"users-create_user","security":[{"OAuth2PasswordBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserPublic"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/users/me":{"get":{"tags":["users"],"summary":"Read User Me","description":"Get current user.","operationId":"users-read_user_me","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserPublic"}}}}},"security":[{"OAuth2PasswordBearer":[]}]},"delete":{"tags":["users"],"summary":"Delete User Me","description":"Delete own user.","operationId":"users-delete_user_me","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Message"}}}}},"security":[{"OAuth2PasswordBearer":[]}]},"patch":{"tags":["users"],"summary":"Update User Me","description":"Update own user.","operationId":"users-update_user_me","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserUpdateMe"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserPublic"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/v1/users/me/password":{"patch":{"tags":["users"],"summary":"Update Password Me","description":"Update own password.","operationId":"users-update_password_me","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdatePassword"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Message"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/v1/users/signup":{"post":{"tags":["users"],"summary":"Register User","description":"Create new user without the need to be logged in.","operationId":"users-register_user","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserRegister"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserPublic"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/users/{user_id}":{"get":{"tags":["users"],"summary":"Read User By Id","description":"Get a specific user by id.","operationId":"users-read_user_by_id","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserPublic"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["users"],"summary":"Update User","description":"Update a user.","operationId":"users-update_user","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"User Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserPublic"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["users"],"summary":"Delete User","description":"Delete a user.","operationId":"users-delete_user","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Message"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/utils/test-email/":{"post":{"tags":["utils"],"summary":"Test Email","description":"Test emails.","operationId":"utils-test_email","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"email_to","in":"query","required":true,"schema":{"type":"string","format":"email","title":"Email To"}}],"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Message"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/utils/health-check/":{"get":{"tags":["utils"],"summary":"Health Check","operationId":"utils-health_check","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"boolean","title":"Response Utils-Health Check"}}}}}}},"/api/v1/contacts/":{"get":{"tags":["contacts"],"summary":"List Contacts","description":"List contacts with filtering.\n\nPass `ids=&ids=` to fetch a specific batch of contacts (useful for\nhydrating references from other resources). When `ids` is provided, the default\n`is_archived=false` filter is lifted so callers can resolve archived rows too.\n\nSoft-deleted contacts (``deleted_at`` set) are hidden by default. Pass\n``include_deleted=true`` to surface them alongside live rows, or\n``only_deleted=true`` to fetch the trash view exclusively.","operationId":"contacts-list_contacts","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"skip","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Skip"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Search"}},{"name":"tag_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Tag Id"}},{"name":"group_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Group Id"}},{"name":"is_favorite","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Favorite"}},{"name":"is_archived","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Archived"}},{"name":"stage","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stage"}},{"name":"include_deleted","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Include Deleted"}},{"name":"only_deleted","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Only Deleted"}},{"name":"ids","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string","format":"uuid"}},{"type":"null"}],"title":"Ids"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactsPublic"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["contacts"],"summary":"Create Contact","description":"Create a new contact.","operationId":"contacts-create_contact","security":[{"OAuth2PasswordBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactPublic"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/contacts/losing-touch":{"get":{"tags":["contacts"],"summary":"List Losing Touch","description":"Return contacts whose cadence has been exceeded.\n\nA contact is 'losing touch' if:\n- contact_frequency_days is set\n- last_contacted_at is NULL or older than contact_frequency_days ago","operationId":"contacts-list_losing_touch","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":20,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactsPublic"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/contacts/{contact_id}":{"get":{"tags":["contacts"],"summary":"Get Contact","description":"Get a single contact by ID.","operationId":"contacts-get_contact","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"contact_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Contact Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactPublic"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["contacts"],"summary":"Update Contact","description":"Update a contact.","operationId":"contacts-update_contact","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"contact_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Contact Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactPublic"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["contacts"],"summary":"Delete Contact","description":"Soft-delete a contact.\n\nSets ``deleted_at`` instead of removing the row, so the contact and its\nrelated data (notes, interactions, addresses, etc.) can be restored. Use\n``POST /contacts/{id}/restore`` to recover, or pass ``only_deleted=true``\nto ``GET /contacts/`` to view the trash.","operationId":"contacts-delete_contact","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"contact_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Contact Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"title":"Response Contacts-Delete Contact"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/contacts/{contact_id}/mentions":{"get":{"tags":["contacts"],"summary":"List Contact Mentions","description":"List notes that @-mention this contact, with the source (authoring) contact.","operationId":"contacts-list_contact_mentions","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"contact_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Contact Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/NoteMentionPublic"},"title":"Response Contacts-List Contact Mentions"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/contacts/{contact_id}/restore":{"post":{"tags":["contacts"],"summary":"Restore Contact","description":"Restore a soft-deleted contact (clear ``deleted_at``).","operationId":"contacts-restore_contact","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"contact_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Contact Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactPublic"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/contacts/{contact_id}/household":{"get":{"tags":["contacts"],"summary":"Get Contact Household","description":"Get household members for a contact.\n\nDerives household/family members via BFS walk of relationships\n(spouse, child, parent, sibling, etc.). Returns names and ages.","operationId":"contacts-get_contact_household","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"contact_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Contact Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"title":"Response Contacts-Get Contact Household"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/tags/":{"get":{"tags":["tags"],"summary":"List Tags","description":"List all tags for the current user.","operationId":"tags-list_tags","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"skip","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Skip"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TagsPublic"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["tags"],"summary":"Create Tag Route","description":"Create a new tag.","operationId":"tags-create_tag_route","security":[{"OAuth2PasswordBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TagCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TagPublic"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/tags/{tag_id}":{"patch":{"tags":["tags"],"summary":"Update Tag","description":"Update a tag.","operationId":"tags-update_tag","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"tag_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Tag Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TagUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TagPublic"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["tags"],"summary":"Delete Tag","description":"Delete a tag.","operationId":"tags-delete_tag","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"tag_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Tag Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"title":"Response Tags-Delete Tag"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/tag-shares/":{"post":{"tags":["tag-shares"],"summary":"Create Tag Share","operationId":"tag-shares-create_tag_share","security":[{"OAuth2PasswordBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/_ShareIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TagSharePublic"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["tag-shares"],"summary":"List Tag Shares","operationId":"tag-shares-list_tag_shares","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"tag_id","in":"query","required":true,"schema":{"type":"string","format":"uuid","title":"Tag Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TagSharesPublic"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/tag-shares/{tag_id}/{grantee_id}":{"delete":{"tags":["tag-shares"],"summary":"Delete Tag Share","operationId":"tag-shares-delete_tag_share","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"tag_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Tag Id"}},{"name":"grantee_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Grantee Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"string"},"title":"Response Tag-Shares-Delete Tag Share"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/groups/":{"get":{"tags":["groups"],"summary":"List Groups","description":"List all groups for the current user.","operationId":"groups-list_groups","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"skip","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Skip"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupsPublic"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["groups"],"summary":"Create Group Route","description":"Create a new group.","operationId":"groups-create_group_route","security":[{"OAuth2PasswordBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupPublic"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/groups/{group_id}":{"patch":{"tags":["groups"],"summary":"Update Group","description":"Update a group.","operationId":"groups-update_group","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Group Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupPublic"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["groups"],"summary":"Delete Group","description":"Delete a group.","operationId":"groups-delete_group","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Group Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"title":"Response Groups-Delete Group"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/contact-fields/contact/{contact_id}":{"get":{"tags":["contact-fields"],"summary":"List Contact Fields","description":"List all fields for a contact.","operationId":"contact-fields-list_contact_fields","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"contact_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Contact Id"}},{"name":"skip","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Skip"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"title":"Response Contact-Fields-List Contact Fields"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/contact-fields/":{"post":{"tags":["contact-fields"],"summary":"Create Contact Field Route","description":"Create a new contact field.","operationId":"contact-fields-create_contact_field_route","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactFieldCreate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactFieldPublic"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/v1/contact-fields/{field_id}":{"patch":{"tags":["contact-fields"],"summary":"Update Contact Field","description":"Update a contact field.","operationId":"contact-fields-update_contact_field","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"field_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Field Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactFieldUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactFieldPublic"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["contact-fields"],"summary":"Delete Contact Field","description":"Delete a contact field.","operationId":"contact-fields-delete_contact_field","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"field_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Field Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"title":"Response Contact-Fields-Delete Contact Field"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/addresses/contact/{contact_id}":{"get":{"tags":["addresses"],"summary":"List Addresses","description":"List all addresses for a contact.","operationId":"addresses-list_addresses","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"contact_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Contact Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"title":"Response Addresses-List Addresses"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/addresses/":{"post":{"tags":["addresses"],"summary":"Create Address Route","description":"Create a new address.","operationId":"addresses-create_address_route","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddressCreate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddressPublic"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/v1/addresses/{address_id}":{"patch":{"tags":["addresses"],"summary":"Update Address","description":"Update an address.","operationId":"addresses-update_address","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"address_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Address Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddressUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddressPublic"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["addresses"],"summary":"Delete Address","description":"Delete an address.","operationId":"addresses-delete_address","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"address_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Address Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"title":"Response Addresses-Delete Address"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/relationships/inverse":{"get":{"tags":["relationships"],"summary":"Lookup Inverse","description":"Return the inferred inverse for a relationship type, or null.\n\nThe frontend calls this before saving to decide whether to prompt\nthe user for the inverse. Symmetric types (\"friend\") return\nthemselves; asymmetric pairs (\"parent\") return their counterpart\n(\"child\"); unknown types return null so the UI can ask.","operationId":"relationships-lookup_inverse","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"type","in":"query","required":true,"schema":{"type":"string","minLength":1,"maxLength":100,"title":"Type"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":{"anyOf":[{"type":"string"},{"type":"null"}]},"title":"Response Relationships-Lookup Inverse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/relationships/contact/{contact_id}":{"get":{"tags":["relationships"],"summary":"List Relationships","description":"List relationships for a contact.","operationId":"relationships-list_relationships","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"contact_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Contact Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"title":"Response Relationships-List Relationships"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/relationships/":{"post":{"tags":["relationships"],"summary":"Create Relationship Route","description":"Create a relationship plus its inverse so both contacts stay symmetric.","operationId":"relationships-create_relationship_route","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RelationshipCreate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RelationshipPublic"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/v1/relationships/{rel_id}":{"patch":{"tags":["relationships"],"summary":"Update Relationship","description":"Update a relationship.\n\nOnly the row addressed by ``rel_id`` is touched; the paired\ninverse row is left as-is so asymmetric pairs (parent/child) can\ndiverge intentionally. Edit each side from its own contact page\nif you want them to stay matched.","operationId":"relationships-update_relationship","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"rel_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Rel Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RelationshipUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RelationshipPublic"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["relationships"],"summary":"Delete Relationship","description":"Delete a relationship and its paired inverse row.","operationId":"relationships-delete_relationship","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"rel_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Rel Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"title":"Response Relationships-Delete Relationship"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/pets/contact/{contact_id}":{"get":{"tags":["pets"],"summary":"List Pets","description":"List pets for a contact.","operationId":"pets-list_pets","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"contact_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Contact Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"title":"Response Pets-List Pets"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/pets/":{"post":{"tags":["pets"],"summary":"Create Pet Route","description":"Create a new pet.","operationId":"pets-create_pet_route","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PetCreate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PetPublic"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/v1/pets/{pet_id}":{"patch":{"tags":["pets"],"summary":"Update Pet","description":"Update a pet.","operationId":"pets-update_pet","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"pet_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Pet Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PetUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PetPublic"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["pets"],"summary":"Delete Pet","description":"Delete a pet.","operationId":"pets-delete_pet","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"pet_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Pet Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"title":"Response Pets-Delete Pet"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/custom-fields/definitions/":{"get":{"tags":["custom-fields"],"summary":"List Field Definitions","description":"List all custom field definitions for the user.","operationId":"custom-fields-list_field_definitions","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"title":"Response Custom-Fields-List Field Definitions"}}}}},"security":[{"OAuth2PasswordBearer":[]}]},"post":{"tags":["custom-fields"],"summary":"Create Field Definition","description":"Create a new custom field definition.","operationId":"custom-fields-create_field_definition","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomFieldDefinitionCreate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomFieldDefinitionPublic"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/v1/custom-fields/definitions/{def_id}":{"patch":{"tags":["custom-fields"],"summary":"Update Field Definition","description":"Update a custom field definition.","operationId":"custom-fields-update_field_definition","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"def_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Def Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomFieldDefinitionUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomFieldDefinitionPublic"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["custom-fields"],"summary":"Delete Field Definition","description":"Delete a custom field definition.","operationId":"custom-fields-delete_field_definition","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"def_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Def Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"title":"Response Custom-Fields-Delete Field Definition"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/custom-fields/values/contact/{contact_id}":{"get":{"tags":["custom-fields"],"summary":"List Field Values","description":"List custom field values for a contact.","operationId":"custom-fields-list_field_values","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"contact_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Contact Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"title":"Response Custom-Fields-List Field Values"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/custom-fields/values/":{"post":{"tags":["custom-fields"],"summary":"Create Field Value","description":"Create a custom field value for a contact.","operationId":"custom-fields-create_field_value","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomFieldValueCreate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomFieldValuePublic"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/v1/custom-fields/values/{value_id}":{"patch":{"tags":["custom-fields"],"summary":"Update Field Value","description":"Update a custom field value.","operationId":"custom-fields-update_field_value","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"value_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Value Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomFieldValueUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomFieldValuePublic"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["custom-fields"],"summary":"Delete Field Value","description":"Delete a custom field value.","operationId":"custom-fields-delete_field_value","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"value_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Value Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"title":"Response Custom-Fields-Delete Field Value"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/interactions/":{"get":{"tags":["interactions"],"summary":"List Interactions","description":"List interactions. Pass ``contact_id`` to filter by attendee.","operationId":"interactions-list_interactions","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"contact_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Contact Id"}},{"name":"skip","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Skip"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InteractionsPublic"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["interactions"],"summary":"Create Interaction Route","description":"Create a new interaction with one or more attendees.","operationId":"interactions-create_interaction_route","security":[{"OAuth2PasswordBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InteractionCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InteractionPublic"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/interactions/{interaction_id}":{"patch":{"tags":["interactions"],"summary":"Update Interaction","description":"Update an interaction; ``attendee_ids`` replaces the attendee set.","operationId":"interactions-update_interaction","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"interaction_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Interaction Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InteractionUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InteractionPublic"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["interactions"],"summary":"Delete Interaction","description":"Delete an interaction and recompute each attendee's last_contacted_at.","operationId":"interactions-delete_interaction","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"interaction_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Interaction Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"title":"Response Interactions-Delete Interaction"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/reminders/":{"get":{"tags":["reminders"],"summary":"List Reminders","description":"List reminders for the current user (owned + tied to visible contacts).","operationId":"reminders-list_reminders","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"skip","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Skip"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}},{"name":"is_active","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RemindersPublic"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["reminders"],"summary":"Create Reminder Route","description":"Create a new reminder.","operationId":"reminders-create_reminder_route","security":[{"OAuth2PasswordBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReminderCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReminderPublic"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/reminders/{reminder_id}":{"patch":{"tags":["reminders"],"summary":"Update Reminder","description":"Update a reminder.","operationId":"reminders-update_reminder","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"reminder_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Reminder Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReminderUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReminderPublic"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["reminders"],"summary":"Delete Reminder","description":"Delete a reminder.","operationId":"reminders-delete_reminder","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"reminder_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Reminder Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"title":"Response Reminders-Delete Reminder"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/reminders/{reminder_id}/snooze":{"post":{"tags":["reminders"],"summary":"Snooze Reminder","description":"Snooze a reminder.","operationId":"reminders-snooze_reminder","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"reminder_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Reminder Id"}},{"name":"minutes","in":"query","required":false,"schema":{"type":"integer","default":30,"title":"Minutes"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"title":"Response Reminders-Snooze Reminder"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/gifts/contact/{contact_id}":{"get":{"tags":["gifts"],"summary":"List Gifts","description":"List gifts for a contact.","operationId":"gifts-list_gifts","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"contact_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Contact Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GiftsPublic"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/gifts/":{"post":{"tags":["gifts"],"summary":"Create Gift Route","description":"Create a new gift.","operationId":"gifts-create_gift_route","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GiftCreate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GiftPublic"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/v1/gifts/{gift_id}":{"patch":{"tags":["gifts"],"summary":"Update Gift","description":"Update a gift.","operationId":"gifts-update_gift","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"gift_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Gift Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GiftUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GiftPublic"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["gifts"],"summary":"Delete Gift","description":"Delete a gift.","operationId":"gifts-delete_gift","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"gift_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Gift Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"title":"Response Gifts-Delete Gift"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/debts/contact/{contact_id}":{"get":{"tags":["debts"],"summary":"List Debts","description":"List debts for a contact.","operationId":"debts-list_debts","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"contact_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Contact Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DebtsPublic"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/debts/":{"post":{"tags":["debts"],"summary":"Create Debt Route","description":"Create a new debt.","operationId":"debts-create_debt_route","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DebtCreate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DebtPublic"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/v1/debts/{debt_id}":{"patch":{"tags":["debts"],"summary":"Update Debt","description":"Update a debt.","operationId":"debts-update_debt","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"debt_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Debt Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DebtUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DebtPublic"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["debts"],"summary":"Delete Debt","description":"Delete a debt.","operationId":"debts-delete_debt","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"debt_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Debt Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"title":"Response Debts-Delete Debt"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/life-events/contact/{contact_id}":{"get":{"tags":["life-events"],"summary":"List Life Events","description":"List life events for a contact.","operationId":"life-events-list_life_events","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"contact_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Contact Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LifeEventsPublic"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/life-events/":{"post":{"tags":["life-events"],"summary":"Create Life Event Route","description":"Create a new life event.","operationId":"life-events-create_life_event_route","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LifeEventCreate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LifeEventPublic"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/v1/life-events/{event_id}":{"patch":{"tags":["life-events"],"summary":"Update Life Event","description":"Update a life event.","operationId":"life-events-update_life_event","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"event_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Event Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LifeEventUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LifeEventPublic"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["life-events"],"summary":"Delete Life Event","description":"Delete a life event.","operationId":"life-events-delete_life_event","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"event_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Event Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"title":"Response Life-Events-Delete Life Event"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/notes/contact/{contact_id}":{"get":{"tags":["notes"],"summary":"List Notes","description":"List notes for a contact.","operationId":"notes-list_notes","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"contact_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Contact Id"}},{"name":"skip","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Skip"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotesPublic"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/notes/":{"post":{"tags":["notes"],"summary":"Create Note Route","description":"Create a new note.","operationId":"notes-create_note_route","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NoteCreate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotePublic"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/v1/notes/{note_id}":{"patch":{"tags":["notes"],"summary":"Update Note Route","description":"Update a note.","operationId":"notes-update_note_route","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"note_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Note Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NoteUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotePublic"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["notes"],"summary":"Delete Note","description":"Delete a note.","operationId":"notes-delete_note","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"note_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Note Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"title":"Response Notes-Delete Note"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/media-recommendations/contact/{contact_id}":{"get":{"tags":["media-recommendations"],"summary":"List Media Recommendations","description":"List media recommendations for a contact.","operationId":"media-recommendations-list_media_recommendations","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"contact_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Contact Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MediaRecommendationsPublic"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/media-recommendations/":{"post":{"tags":["media-recommendations"],"summary":"Create Media Recommendation Route","description":"Create a new media recommendation.","operationId":"media-recommendations-create_media_recommendation_route","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MediaRecommendationCreate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MediaRecommendationPublic"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/v1/media-recommendations/{rec_id}":{"patch":{"tags":["media-recommendations"],"summary":"Update Media Recommendation","description":"Update a media recommendation.","operationId":"media-recommendations-update_media_recommendation","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"rec_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Rec Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MediaRecommendationUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MediaRecommendationPublic"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["media-recommendations"],"summary":"Delete Media Recommendation","description":"Delete a media recommendation.","operationId":"media-recommendations-delete_media_recommendation","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"rec_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Rec Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"title":"Response Media-Recommendations-Delete Media Recommendation"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/journal/":{"get":{"tags":["journal"],"summary":"List Journal Entries","description":"List journal entries for the current user.","operationId":"journal-list_journal_entries","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"skip","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Skip"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JournalEntriesPublic"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["journal"],"summary":"Create Journal Entry Route","description":"Create a new journal entry.","operationId":"journal-create_journal_entry_route","security":[{"OAuth2PasswordBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JournalEntryCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JournalEntryPublic"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/journal/{entry_id}":{"patch":{"tags":["journal"],"summary":"Update Journal Entry","description":"Update a journal entry.","operationId":"journal-update_journal_entry","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"entry_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Entry Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JournalEntryUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JournalEntryPublic"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["journal"],"summary":"Delete Journal Entry","description":"Delete a journal entry.","operationId":"journal-delete_journal_entry","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"entry_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Entry Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"title":"Response Journal-Delete Journal Entry"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/import-export/import/vcard":{"post":{"tags":["import-export"],"summary":"Import Vcard","description":"Import contacts from a .vcf file (supports multiple vCards in one file).","operationId":"import-export-import_vcard","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_import-export-import_vcard"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"title":"Response Import-Export-Import Vcard"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/v1/import-export/export/vcard":{"get":{"tags":["import-export"],"summary":"Export Vcard","description":"Export all contacts as a single .vcf file.","operationId":"import-export-export_vcard","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"title":"Response Import-Export-Export Vcard"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/v1/import-export/export/json":{"get":{"tags":["import-export"],"summary":"Export Json","description":"Export all data as JSON.","operationId":"import-export-export_json","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"title":"Response Import-Export-Export Json"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/v1/webhooks/":{"get":{"tags":["webhooks"],"summary":"List Webhooks","description":"List all webhook endpoints for the user.","operationId":"webhooks-list_webhooks","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"title":"Response Webhooks-List Webhooks"}}}}},"security":[{"OAuth2PasswordBearer":[]}]},"post":{"tags":["webhooks"],"summary":"Create Webhook","description":"Create a new webhook endpoint.","operationId":"webhooks-create_webhook","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookEndpointBase"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"title":"Response Webhooks-Create Webhook"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/v1/webhooks/{webhook_id}":{"patch":{"tags":["webhooks"],"summary":"Update Webhook","description":"Update a webhook endpoint.","operationId":"webhooks-update_webhook","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"webhook_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Webhook Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookEndpointBase"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"title":"Response Webhooks-Update Webhook"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["webhooks"],"summary":"Delete Webhook","description":"Delete a webhook endpoint.","operationId":"webhooks-delete_webhook","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"webhook_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Webhook Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"title":"Response Webhooks-Delete Webhook"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/webhooks/inbound/{api_key}":{"post":{"tags":["webhooks"],"summary":"Inbound Webhook","description":"Inbound webhook receiver for external integrations (n8n, Aqara, etc.).\n\nPayload format:\n{\n \"contact_email\": \"user@example.com\", // OR\n \"contact_name\": \"John Doe\", // lookup by name\n \"channel\": \"call\", // InteractionChannel value\n \"notes\": \"Called about project X\", // optional\n \"occurred_at\": \"2024-01-15T10:00:00Z\" // optional, defaults to now\n}","operationId":"webhooks-inbound_webhook","parameters":[{"name":"api_key","in":"path","required":true,"schema":{"type":"string","title":"Api Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Payload"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"title":"Response Webhooks-Inbound Webhook"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/activity-logs/":{"get":{"tags":["activity-logs"],"summary":"List Activity Logs","description":"Return activity log entries for entities visible to the current user.\n\nOwned logs (any entity type) are always included. Contact-entity logs are\nalso included when the contact is visible via a TagShare grant.","operationId":"activity-logs-list_activity_logs","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"entity_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Entity Type"}},{"name":"entity_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Entity Id"}},{"name":"tag_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Tag Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ActivityLogsPublic"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/calendar/month/{yyyy_mm}":{"get":{"tags":["calendar"],"summary":"Get Calendar Month","operationId":"calendar-get_calendar_month","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"yyyy_mm","in":"path","required":true,"schema":{"type":"string","title":"Yyyy Mm"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CalendarMonthResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/private/users/":{"post":{"tags":["private"],"summary":"Create User","description":"Create a new user.","operationId":"private-create_user","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PrivateUserCreate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserPublic"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"ActivityLogPublic":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"owner_id":{"type":"string","format":"uuid","title":"Owner Id"},"actor_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Actor Id"},"entity_type":{"type":"string","title":"Entity Type"},"entity_id":{"type":"string","format":"uuid","title":"Entity Id"},"action":{"type":"string","title":"Action"},"changes_json":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Changes Json"},"occurred_at":{"type":"string","format":"date-time","title":"Occurred At"}},"type":"object","required":["id","owner_id","actor_id","entity_type","entity_id","action","changes_json","occurred_at"],"title":"ActivityLogPublic"},"ActivityLogsPublic":{"properties":{"data":{"items":{"$ref":"#/components/schemas/ActivityLogPublic"},"type":"array","title":"Data"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["data","count"],"title":"ActivityLogsPublic"},"AddressCreate":{"properties":{"label":{"type":"string","maxLength":100,"title":"Label","description":"Label like \"home\", \"work\", \"other\".","default":"home"},"street":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Street","description":"Street line 1."},"extended":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Extended","description":"Apartment, suite, floor, etc."},"city":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"City","description":"City."},"region":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Region","description":"State, province, or region."},"postal_code":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Postal Code","description":"ZIP or postal code."},"country":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Country","description":"Country."},"latitude":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Latitude","description":"Geocoded latitude; used for map visualization."},"longitude":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Longitude","description":"Geocoded longitude; used for map visualization."},"contact_id":{"type":"string","format":"uuid","title":"Contact Id"}},"type":"object","required":["contact_id"],"title":"AddressCreate"},"AddressPublic":{"properties":{"label":{"type":"string","maxLength":100,"title":"Label","description":"Label like \"home\", \"work\", \"other\".","default":"home"},"street":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Street","description":"Street line 1."},"extended":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Extended","description":"Apartment, suite, floor, etc."},"city":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"City","description":"City."},"region":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Region","description":"State, province, or region."},"postal_code":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Postal Code","description":"ZIP or postal code."},"country":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Country","description":"Country."},"latitude":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Latitude","description":"Geocoded latitude; used for map visualization."},"longitude":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Longitude","description":"Geocoded longitude; used for map visualization."},"id":{"type":"string","format":"uuid","title":"Id"},"contact_id":{"type":"string","format":"uuid","title":"Contact Id"}},"type":"object","required":["id","contact_id"],"title":"AddressPublic"},"AddressUpdate":{"properties":{"label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Label"},"street":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Street"},"extended":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Extended"},"city":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"City"},"region":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Region"},"postal_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Postal Code"},"country":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Country"},"latitude":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Latitude"},"longitude":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Longitude"}},"type":"object","title":"AddressUpdate"},"Body_import-export-import_vcard":{"properties":{"file":{"type":"string","format":"binary","title":"File"}},"type":"object","required":["file"],"title":"Body_import-export-import_vcard"},"Body_login-login_access_token":{"properties":{"grant_type":{"anyOf":[{"type":"string","pattern":"^password$"},{"type":"null"}],"title":"Grant Type"},"username":{"type":"string","title":"Username"},"password":{"type":"string","format":"password","title":"Password"},"scope":{"type":"string","title":"Scope","default":""},"client_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Client Id"},"client_secret":{"anyOf":[{"type":"string"},{"type":"null"}],"format":"password","title":"Client Secret"}},"type":"object","required":["username","password"],"title":"Body_login-login_access_token"},"CalendarEntry":{"properties":{"contact_id":{"type":"string","format":"uuid","title":"Contact Id"},"name":{"type":"string","title":"Name"},"type":{"type":"string","title":"Type"},"age":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Age"}},"type":"object","required":["contact_id","name","type","age"],"title":"CalendarEntry"},"CalendarMonthResponse":{"properties":{"month":{"type":"string","title":"Month"},"days":{"additionalProperties":{"items":{"$ref":"#/components/schemas/CalendarEntry"},"type":"array"},"type":"object","title":"Days"}},"type":"object","required":["month","days"],"title":"CalendarMonthResponse"},"ContactCreate":{"properties":{"first_name":{"type":"string","maxLength":255,"minLength":1,"title":"First Name","description":"Given name; required."},"last_name":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Last Name","description":"Family name."},"middle_name":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Middle Name","description":"Middle name or initial."},"prefix":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Prefix","description":"Honorific like Dr., Mr., Ms."},"suffix":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Suffix","description":"Suffix like Jr., PhD."},"nickname":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Nickname","description":"Preferred or informal name."},"company":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Company","description":"Organization name."},"department":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Department","description":"Department within the company."},"title":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Title","description":"Job title."},"birthday":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Birthday","description":"Date of birth; used for milestone and birthday reminders."},"how_we_met":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"How We Met","description":"Short story of how the introduction happened."},"is_favorite":{"type":"boolean","title":"Is Favorite","description":"Pinned to the top of contact lists.","default":false},"is_archived":{"type":"boolean","title":"Is Archived","description":"Soft-deleted; excluded from default lists.","default":false},"is_deceased":{"type":"boolean","title":"Is Deceased","description":"Marks the contact as deceased.","default":false},"deceased_at":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Deceased At","description":"Date the contact passed away."},"contact_frequency_days":{"anyOf":[{"type":"integer","maximum":3650.0,"minimum":1.0},{"type":"null"}],"title":"Contact Frequency Days","description":"Target days between interactions; drives losing-touch cadence."},"stage":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Stage","description":"Kanban stage like Active, Dormant, Lost."},"tag_ids":{"anyOf":[{"items":{"type":"string","format":"uuid"},"type":"array"},{"type":"null"}],"title":"Tag Ids"},"group_ids":{"anyOf":[{"items":{"type":"string","format":"uuid"},"type":"array"},{"type":"null"}],"title":"Group Ids"}},"type":"object","required":["first_name"],"title":"ContactCreate"},"ContactFieldCreate":{"properties":{"field_type":{"$ref":"#/components/schemas/ContactFieldType","description":"Kind of contact info (email or phone)."},"label":{"type":"string","maxLength":100,"title":"Label","description":"Label like \"home\", \"work\", \"cell\", \"twitter\"."},"value":{"type":"string","maxLength":2048,"minLength":1,"title":"Value","description":"The actual email address, phone number, etc."},"is_primary":{"type":"boolean","title":"Is Primary","description":"Marks the primary entry for this field_type on the contact.","default":false},"sort_order":{"type":"integer","title":"Sort Order","description":"Display order within the same field_type.","default":0},"contact_id":{"type":"string","format":"uuid","title":"Contact Id"}},"type":"object","required":["field_type","label","value","contact_id"],"title":"ContactFieldCreate"},"ContactFieldPublic":{"properties":{"field_type":{"$ref":"#/components/schemas/ContactFieldType","description":"Kind of contact info (email or phone)."},"label":{"type":"string","maxLength":100,"title":"Label","description":"Label like \"home\", \"work\", \"cell\", \"twitter\"."},"value":{"type":"string","maxLength":2048,"minLength":1,"title":"Value","description":"The actual email address, phone number, etc."},"is_primary":{"type":"boolean","title":"Is Primary","description":"Marks the primary entry for this field_type on the contact.","default":false},"sort_order":{"type":"integer","title":"Sort Order","description":"Display order within the same field_type.","default":0},"id":{"type":"string","format":"uuid","title":"Id"},"contact_id":{"type":"string","format":"uuid","title":"Contact Id"}},"type":"object","required":["field_type","label","value","id","contact_id"],"title":"ContactFieldPublic"},"ContactFieldType":{"type":"string","enum":["email","phone"],"title":"ContactFieldType"},"ContactFieldUpdate":{"properties":{"field_type":{"anyOf":[{"$ref":"#/components/schemas/ContactFieldType"},{"type":"null"}]},"label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Label"},"value":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Value"},"is_primary":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Primary"},"sort_order":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Sort Order"}},"type":"object","title":"ContactFieldUpdate"},"ContactPublic":{"properties":{"first_name":{"type":"string","maxLength":255,"minLength":1,"title":"First Name","description":"Given name; required."},"last_name":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Last Name","description":"Family name."},"middle_name":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Middle Name","description":"Middle name or initial."},"prefix":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Prefix","description":"Honorific like Dr., Mr., Ms."},"suffix":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Suffix","description":"Suffix like Jr., PhD."},"nickname":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Nickname","description":"Preferred or informal name."},"company":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Company","description":"Organization name."},"department":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Department","description":"Department within the company."},"title":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Title","description":"Job title."},"birthday":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Birthday","description":"Date of birth; used for milestone and birthday reminders."},"how_we_met":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"How We Met","description":"Short story of how the introduction happened."},"is_favorite":{"type":"boolean","title":"Is Favorite","description":"Pinned to the top of contact lists.","default":false},"is_archived":{"type":"boolean","title":"Is Archived","description":"Soft-deleted; excluded from default lists.","default":false},"is_deceased":{"type":"boolean","title":"Is Deceased","description":"Marks the contact as deceased.","default":false},"deceased_at":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Deceased At","description":"Date the contact passed away."},"contact_frequency_days":{"anyOf":[{"type":"integer","maximum":3650.0,"minimum":1.0},{"type":"null"}],"title":"Contact Frequency Days","description":"Target days between interactions; drives losing-touch cadence."},"stage":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Stage","description":"Kanban stage like Active, Dormant, Lost."},"id":{"type":"string","format":"uuid","title":"Id"},"avatar_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Avatar Url"},"last_contacted_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Contacted At"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"deleted_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Deleted At"},"tags":{"items":{"$ref":"#/components/schemas/TagPublic"},"type":"array","title":"Tags","default":[]},"groups":{"items":{"$ref":"#/components/schemas/GroupPublic"},"type":"array","title":"Groups","default":[]}},"type":"object","required":["first_name","id","avatar_url","last_contacted_at","created_at","updated_at"],"title":"ContactPublic"},"ContactUpdate":{"properties":{"first_name":{"anyOf":[{"type":"string","maxLength":255,"minLength":1},{"type":"null"}],"title":"First Name"},"last_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Name"},"middle_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Middle Name"},"prefix":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Prefix"},"suffix":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Suffix"},"nickname":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Nickname"},"company":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company"},"department":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Department"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"birthday":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Birthday"},"how_we_met":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"How We Met"},"is_favorite":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Favorite"},"is_archived":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Archived"},"is_deceased":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Deceased"},"deceased_at":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Deceased At"},"contact_frequency_days":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Contact Frequency Days"},"stage":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stage"},"tag_ids":{"anyOf":[{"items":{"type":"string","format":"uuid"},"type":"array"},{"type":"null"}],"title":"Tag Ids"},"group_ids":{"anyOf":[{"items":{"type":"string","format":"uuid"},"type":"array"},{"type":"null"}],"title":"Group Ids"}},"type":"object","title":"ContactUpdate"},"ContactsPublic":{"properties":{"data":{"items":{"$ref":"#/components/schemas/ContactPublic"},"type":"array","title":"Data"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["data","count"],"title":"ContactsPublic"},"CustomFieldDefinitionCreate":{"properties":{"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name","description":"Custom field name shown in the UI."},"field_type":{"type":"string","maxLength":50,"title":"Field Type","description":"Field type: text, number, date, boolean, or select.","default":"text"},"description":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Description","description":"Help text displayed alongside the field in the UI."},"options":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Options","description":"Comma-separated options for field_type=\"select\"."},"icon":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Icon","description":"Icon slug for the UI (e.g. \"heart\", \"book\")."}},"type":"object","required":["name"],"title":"CustomFieldDefinitionCreate"},"CustomFieldDefinitionPublic":{"properties":{"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name","description":"Custom field name shown in the UI."},"field_type":{"type":"string","maxLength":50,"title":"Field Type","description":"Field type: text, number, date, boolean, or select.","default":"text"},"description":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Description","description":"Help text displayed alongside the field in the UI."},"options":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Options","description":"Comma-separated options for field_type=\"select\"."},"icon":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Icon","description":"Icon slug for the UI (e.g. \"heart\", \"book\")."},"id":{"type":"string","format":"uuid","title":"Id"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["name","id","created_at"],"title":"CustomFieldDefinitionPublic"},"CustomFieldDefinitionUpdate":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"field_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Field Type"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"options":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Options"},"icon":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Icon"}},"type":"object","title":"CustomFieldDefinitionUpdate"},"CustomFieldValueCreate":{"properties":{"value":{"type":"string","maxLength":5000,"title":"Value","description":"Value as a string; coerced from the declared field_type."},"contact_id":{"type":"string","format":"uuid","title":"Contact Id"},"field_definition_id":{"type":"string","format":"uuid","title":"Field Definition Id"}},"type":"object","required":["value","contact_id","field_definition_id"],"title":"CustomFieldValueCreate"},"CustomFieldValuePublic":{"properties":{"value":{"type":"string","maxLength":5000,"title":"Value","description":"Value as a string; coerced from the declared field_type."},"id":{"type":"string","format":"uuid","title":"Id"},"contact_id":{"type":"string","format":"uuid","title":"Contact Id"},"field_definition_id":{"type":"string","format":"uuid","title":"Field Definition Id"},"field_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Field Name"}},"type":"object","required":["value","id","contact_id","field_definition_id"],"title":"CustomFieldValuePublic"},"CustomFieldValueUpdate":{"properties":{"value":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Value"}},"type":"object","title":"CustomFieldValueUpdate"},"DebtCreate":{"properties":{"direction":{"$ref":"#/components/schemas/DebtDirection","description":"Who owes whom: i_owe (you owe them) or they_owe (they owe you)."},"amount":{"type":"number","exclusiveMinimum":0.0,"title":"Amount","description":"Amount owed; must be greater than zero."},"currency":{"type":"string","maxLength":3,"title":"Currency","description":"ISO 4217 currency code.","default":"USD"},"reason":{"anyOf":[{"type":"string","maxLength":1000},{"type":"null"}],"title":"Reason","description":"What the debt is for."},"is_settled":{"type":"boolean","title":"Is Settled","description":"Marked paid off.","default":false},"settled_at":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Settled At","description":"Date the debt was settled."},"contact_id":{"type":"string","format":"uuid","title":"Contact Id"}},"type":"object","required":["direction","amount","contact_id"],"title":"DebtCreate"},"DebtDirection":{"type":"string","enum":["i_owe","they_owe"],"title":"DebtDirection"},"DebtPublic":{"properties":{"direction":{"$ref":"#/components/schemas/DebtDirection","description":"Who owes whom: i_owe (you owe them) or they_owe (they owe you)."},"amount":{"type":"number","exclusiveMinimum":0.0,"title":"Amount","description":"Amount owed; must be greater than zero."},"currency":{"type":"string","maxLength":3,"title":"Currency","description":"ISO 4217 currency code.","default":"USD"},"reason":{"anyOf":[{"type":"string","maxLength":1000},{"type":"null"}],"title":"Reason","description":"What the debt is for."},"is_settled":{"type":"boolean","title":"Is Settled","description":"Marked paid off.","default":false},"settled_at":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Settled At","description":"Date the debt was settled."},"id":{"type":"string","format":"uuid","title":"Id"},"contact_id":{"type":"string","format":"uuid","title":"Contact Id"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["direction","amount","id","contact_id","created_at"],"title":"DebtPublic"},"DebtUpdate":{"properties":{"direction":{"anyOf":[{"$ref":"#/components/schemas/DebtDirection"},{"type":"null"}]},"amount":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Amount"},"currency":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Currency"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason"},"is_settled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Settled"},"settled_at":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Settled At"}},"type":"object","title":"DebtUpdate"},"DebtsPublic":{"properties":{"data":{"items":{"$ref":"#/components/schemas/DebtPublic"},"type":"array","title":"Data"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["data","count"],"title":"DebtsPublic"},"GiftCreate":{"properties":{"name":{"type":"string","maxLength":500,"minLength":1,"title":"Name","description":"Gift name."},"description":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Description","description":"Details about the gift."},"status":{"$ref":"#/components/schemas/GiftStatus","description":"Lifecycle: idea, given, or received.","default":"idea"},"occasion":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Occasion","description":"Occasion like Birthday, Christmas, Housewarming."},"gift_date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Gift Date","description":"When the gift was given or received."},"value_amount":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Value Amount","description":"Monetary cost or value."},"value_currency":{"type":"string","maxLength":3,"title":"Value Currency","description":"ISO 4217 currency code.","default":"USD"},"url":{"anyOf":[{"type":"string","maxLength":2048},{"type":"null"}],"title":"Url","description":"Link to the product page (e.g. Amazon)."},"contact_id":{"type":"string","format":"uuid","title":"Contact Id"}},"type":"object","required":["name","contact_id"],"title":"GiftCreate"},"GiftPublic":{"properties":{"name":{"type":"string","maxLength":500,"minLength":1,"title":"Name","description":"Gift name."},"description":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Description","description":"Details about the gift."},"status":{"$ref":"#/components/schemas/GiftStatus","description":"Lifecycle: idea, given, or received.","default":"idea"},"occasion":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Occasion","description":"Occasion like Birthday, Christmas, Housewarming."},"gift_date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Gift Date","description":"When the gift was given or received."},"value_amount":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Value Amount","description":"Monetary cost or value."},"value_currency":{"type":"string","maxLength":3,"title":"Value Currency","description":"ISO 4217 currency code.","default":"USD"},"url":{"anyOf":[{"type":"string","maxLength":2048},{"type":"null"}],"title":"Url","description":"Link to the product page (e.g. Amazon)."},"id":{"type":"string","format":"uuid","title":"Id"},"contact_id":{"type":"string","format":"uuid","title":"Contact Id"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["name","id","contact_id","created_at"],"title":"GiftPublic"},"GiftStatus":{"type":"string","enum":["idea","given","received"],"title":"GiftStatus"},"GiftUpdate":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"status":{"anyOf":[{"$ref":"#/components/schemas/GiftStatus"},{"type":"null"}]},"occasion":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Occasion"},"gift_date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Gift Date"},"value_amount":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Value Amount"},"value_currency":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Value Currency"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url"}},"type":"object","title":"GiftUpdate"},"GiftsPublic":{"properties":{"data":{"items":{"$ref":"#/components/schemas/GiftPublic"},"type":"array","title":"Data"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["data","count"],"title":"GiftsPublic"},"GroupCreate":{"properties":{"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name","description":"Group name, 1-255 chars."},"description":{"anyOf":[{"type":"string","maxLength":1000},{"type":"null"}],"title":"Description","description":"Optional group description."}},"type":"object","required":["name"],"title":"GroupCreate"},"GroupPublic":{"properties":{"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name","description":"Group name, 1-255 chars."},"description":{"anyOf":[{"type":"string","maxLength":1000},{"type":"null"}],"title":"Description","description":"Optional group description."},"id":{"type":"string","format":"uuid","title":"Id"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["name","id","created_at"],"title":"GroupPublic"},"GroupUpdate":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":255,"minLength":1},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"}},"type":"object","title":"GroupUpdate"},"GroupsPublic":{"properties":{"data":{"items":{"$ref":"#/components/schemas/GroupPublic"},"type":"array","title":"Data"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["data","count"],"title":"GroupsPublic"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"InteractionAttendeeSummary":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"first_name":{"type":"string","title":"First Name"},"last_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Name"},"avatar_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Avatar Url"}},"type":"object","required":["id","first_name"],"title":"InteractionAttendeeSummary"},"InteractionChannel":{"type":"string","enum":["call","in_person","text","email","video","social","other"],"title":"InteractionChannel"},"InteractionCreate":{"properties":{"channel":{"$ref":"#/components/schemas/InteractionChannel","description":"How the interaction happened (call, in_person, text, etc.)."},"occurred_at":{"type":"string","format":"date-time","title":"Occurred At","description":"When the interaction actually took place."},"notes":{"anyOf":[{"type":"string","maxLength":10000},{"type":"null"}],"title":"Notes","description":"Conversation summary, action items, etc."},"mood":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Mood","description":"Emoji or keyword capturing the tone."},"duration_minutes":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Duration Minutes","description":"Length of the interaction in minutes."},"attendee_ids":{"items":{"type":"string","format":"uuid"},"type":"array","minItems":1,"title":"Attendee Ids","description":"Contacts that attended; must have at least one."}},"type":"object","required":["channel","occurred_at","attendee_ids"],"title":"InteractionCreate"},"InteractionPublic":{"properties":{"channel":{"$ref":"#/components/schemas/InteractionChannel","description":"How the interaction happened (call, in_person, text, etc.)."},"occurred_at":{"type":"string","format":"date-time","title":"Occurred At","description":"When the interaction actually took place."},"notes":{"anyOf":[{"type":"string","maxLength":10000},{"type":"null"}],"title":"Notes","description":"Conversation summary, action items, etc."},"mood":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Mood","description":"Emoji or keyword capturing the tone."},"duration_minutes":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Duration Minutes","description":"Length of the interaction in minutes."},"id":{"type":"string","format":"uuid","title":"Id"},"attendees":{"items":{"$ref":"#/components/schemas/InteractionAttendeeSummary"},"type":"array","title":"Attendees","default":[]},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["channel","occurred_at","id","created_at"],"title":"InteractionPublic"},"InteractionUpdate":{"properties":{"channel":{"anyOf":[{"$ref":"#/components/schemas/InteractionChannel"},{"type":"null"}]},"occurred_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Occurred At"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"},"mood":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mood"},"duration_minutes":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Duration Minutes"},"attendee_ids":{"anyOf":[{"items":{"type":"string","format":"uuid"},"type":"array","minItems":1},{"type":"null"}],"title":"Attendee Ids","description":"Replace the attendee set; must have at least one if provided."}},"type":"object","title":"InteractionUpdate"},"InteractionsPublic":{"properties":{"data":{"items":{"$ref":"#/components/schemas/InteractionPublic"},"type":"array","title":"Data"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["data","count"],"title":"InteractionsPublic"},"JournalEntriesPublic":{"properties":{"data":{"items":{"$ref":"#/components/schemas/JournalEntryPublic"},"type":"array","title":"Data"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["data","count"],"title":"JournalEntriesPublic"},"JournalEntryCreate":{"properties":{"body":{"type":"string","maxLength":50000,"minLength":1,"title":"Body","description":"Entry body, 1-50000 chars."},"mood":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Mood","description":"Emoji or keyword capturing the mood."},"entry_date":{"type":"string","format":"date","title":"Entry Date","description":"Date the entry is about (may differ from created_at)."}},"type":"object","required":["body","entry_date"],"title":"JournalEntryCreate"},"JournalEntryPublic":{"properties":{"body":{"type":"string","maxLength":50000,"minLength":1,"title":"Body","description":"Entry body, 1-50000 chars."},"mood":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Mood","description":"Emoji or keyword capturing the mood."},"entry_date":{"type":"string","format":"date","title":"Entry Date","description":"Date the entry is about (may differ from created_at)."},"id":{"type":"string","format":"uuid","title":"Id"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["body","entry_date","id","created_at","updated_at"],"title":"JournalEntryPublic"},"JournalEntryUpdate":{"properties":{"body":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Body"},"mood":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mood"},"entry_date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Entry Date"}},"type":"object","title":"JournalEntryUpdate"},"LifeEventCreate":{"properties":{"event_type":{"type":"string","maxLength":100,"title":"Event Type","description":"Kind of milestone: job_change, move, wedding, baby, graduation, birthday, anniversary, etc."},"title":{"type":"string","maxLength":500,"minLength":1,"title":"Title","description":"Event title."},"description":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Description","description":"Extra details about the event."},"occurred_at":{"type":"string","format":"date","title":"Occurred At","description":"Date the event happened."},"create_annual_reminder":{"type":"boolean","title":"Create Annual Reminder","description":"If true, auto-create a yearly recurring reminder on this date.","default":false},"contact_id":{"type":"string","format":"uuid","title":"Contact Id"}},"type":"object","required":["event_type","title","occurred_at","contact_id"],"title":"LifeEventCreate"},"LifeEventPublic":{"properties":{"event_type":{"type":"string","maxLength":100,"title":"Event Type","description":"Kind of milestone: job_change, move, wedding, baby, graduation, birthday, anniversary, etc."},"title":{"type":"string","maxLength":500,"minLength":1,"title":"Title","description":"Event title."},"description":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Description","description":"Extra details about the event."},"occurred_at":{"type":"string","format":"date","title":"Occurred At","description":"Date the event happened."},"create_annual_reminder":{"type":"boolean","title":"Create Annual Reminder","description":"If true, auto-create a yearly recurring reminder on this date.","default":false},"id":{"type":"string","format":"uuid","title":"Id"},"contact_id":{"type":"string","format":"uuid","title":"Contact Id"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["event_type","title","occurred_at","id","contact_id","created_at"],"title":"LifeEventPublic"},"LifeEventUpdate":{"properties":{"event_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Event Type"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"occurred_at":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Occurred At"},"create_annual_reminder":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Create Annual Reminder"}},"type":"object","title":"LifeEventUpdate"},"LifeEventsPublic":{"properties":{"data":{"items":{"$ref":"#/components/schemas/LifeEventPublic"},"type":"array","title":"Data"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["data","count"],"title":"LifeEventsPublic"},"MediaCategory":{"type":"string","enum":["movie","tv_show","podcast","musician","book","other"],"title":"MediaCategory"},"MediaRecommendationCreate":{"properties":{"category":{"$ref":"#/components/schemas/MediaCategory","description":"Media category: movie, tv_show, podcast, musician, book, or other."},"title":{"type":"string","maxLength":500,"minLength":1,"title":"Title","description":"Title of the work."},"creator":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Creator","description":"Author, director, artist, or similar creator."},"note":{"anyOf":[{"type":"string","maxLength":5000},{"type":"null"}],"title":"Note","description":"Why it was recommended or personal reaction."},"recommended_at":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Recommended At","description":"Date the recommendation was made."},"contact_id":{"type":"string","format":"uuid","title":"Contact Id"}},"type":"object","required":["category","title","contact_id"],"title":"MediaRecommendationCreate"},"MediaRecommendationPublic":{"properties":{"category":{"$ref":"#/components/schemas/MediaCategory","description":"Media category: movie, tv_show, podcast, musician, book, or other."},"title":{"type":"string","maxLength":500,"minLength":1,"title":"Title","description":"Title of the work."},"creator":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Creator","description":"Author, director, artist, or similar creator."},"note":{"anyOf":[{"type":"string","maxLength":5000},{"type":"null"}],"title":"Note","description":"Why it was recommended or personal reaction."},"recommended_at":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Recommended At","description":"Date the recommendation was made."},"id":{"type":"string","format":"uuid","title":"Id"},"contact_id":{"type":"string","format":"uuid","title":"Contact Id"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["category","title","id","contact_id","created_at","updated_at"],"title":"MediaRecommendationPublic"},"MediaRecommendationUpdate":{"properties":{"category":{"anyOf":[{"$ref":"#/components/schemas/MediaCategory"},{"type":"null"}]},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"creator":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Creator"},"note":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Note"},"recommended_at":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Recommended At"}},"type":"object","title":"MediaRecommendationUpdate"},"MediaRecommendationsPublic":{"properties":{"data":{"items":{"$ref":"#/components/schemas/MediaRecommendationPublic"},"type":"array","title":"Data"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["data","count"],"title":"MediaRecommendationsPublic"},"Message":{"properties":{"message":{"type":"string","title":"Message"}},"type":"object","required":["message"],"title":"Message"},"NewPassword":{"properties":{"token":{"type":"string","title":"Token"},"new_password":{"type":"string","maxLength":128,"minLength":8,"title":"New Password"}},"type":"object","required":["token","new_password"],"title":"NewPassword"},"NoteCreate":{"properties":{"body":{"type":"string","maxLength":50000,"minLength":1,"title":"Body","description":"Note body, 1-50000 chars."},"contact_id":{"type":"string","format":"uuid","title":"Contact Id"}},"type":"object","required":["body","contact_id"],"title":"NoteCreate"},"NoteMentionPublic":{"properties":{"note_id":{"type":"string","format":"uuid","title":"Note Id"},"note_body":{"type":"string","title":"Note Body"},"note_created_at":{"type":"string","format":"date-time","title":"Note Created At"},"source_contact":{"$ref":"#/components/schemas/_MentionSourceContact"}},"type":"object","required":["note_id","note_body","note_created_at","source_contact"],"title":"NoteMentionPublic"},"NotePublic":{"properties":{"body":{"type":"string","maxLength":50000,"minLength":1,"title":"Body","description":"Note body, 1-50000 chars."},"id":{"type":"string","format":"uuid","title":"Id"},"contact_id":{"type":"string","format":"uuid","title":"Contact Id"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["body","id","contact_id","created_at","updated_at"],"title":"NotePublic"},"NoteUpdate":{"properties":{"body":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Body"}},"type":"object","title":"NoteUpdate"},"NotesPublic":{"properties":{"data":{"items":{"$ref":"#/components/schemas/NotePublic"},"type":"array","title":"Data"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["data","count"],"title":"NotesPublic"},"PetCreate":{"properties":{"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name","description":"Pet's name."},"species":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Species","description":"Species like dog, cat, bird."},"breed":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Breed","description":"Breed, if known."},"notes":{"anyOf":[{"type":"string","maxLength":1000},{"type":"null"}],"title":"Notes","description":"Freeform notes (e.g. allergies, birthday)."},"contact_id":{"type":"string","format":"uuid","title":"Contact Id"}},"type":"object","required":["name","contact_id"],"title":"PetCreate"},"PetPublic":{"properties":{"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name","description":"Pet's name."},"species":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Species","description":"Species like dog, cat, bird."},"breed":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Breed","description":"Breed, if known."},"notes":{"anyOf":[{"type":"string","maxLength":1000},{"type":"null"}],"title":"Notes","description":"Freeform notes (e.g. allergies, birthday)."},"id":{"type":"string","format":"uuid","title":"Id"},"contact_id":{"type":"string","format":"uuid","title":"Contact Id"}},"type":"object","required":["name","id","contact_id"],"title":"PetPublic"},"PetUpdate":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":255,"minLength":1},{"type":"null"}],"title":"Name"},"species":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Species"},"breed":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Breed"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"}},"type":"object","title":"PetUpdate"},"PrivateUserCreate":{"properties":{"email":{"type":"string","title":"Email"},"password":{"type":"string","title":"Password"},"full_name":{"type":"string","title":"Full Name"},"is_verified":{"type":"boolean","title":"Is Verified","default":false}},"type":"object","required":["email","password","full_name"],"title":"PrivateUserCreate"},"RelationshipCreate":{"properties":{"relationship_type":{"type":"string","maxLength":100,"title":"Relationship Type","description":"Kind of relationship: spouse, child, parent, sibling, friend, colleague, etc."},"notes":{"anyOf":[{"type":"string","maxLength":1000},{"type":"null"}],"title":"Notes","description":"Additional context about the relationship."},"contact_id":{"type":"string","format":"uuid","title":"Contact Id"},"related_contact_id":{"type":"string","format":"uuid","title":"Related Contact Id"},"inverse_relationship_type":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Inverse Relationship Type","description":"Type for the auto-generated inverse row. If omitted, the server infers it from a known map of symmetric/asymmetric types and returns 422 when it cannot."}},"type":"object","required":["relationship_type","contact_id","related_contact_id"],"title":"RelationshipCreate"},"RelationshipPublic":{"properties":{"relationship_type":{"type":"string","maxLength":100,"title":"Relationship Type","description":"Kind of relationship: spouse, child, parent, sibling, friend, colleague, etc."},"notes":{"anyOf":[{"type":"string","maxLength":1000},{"type":"null"}],"title":"Notes","description":"Additional context about the relationship."},"id":{"type":"string","format":"uuid","title":"Id"},"contact_id":{"type":"string","format":"uuid","title":"Contact Id"},"related_contact_id":{"type":"string","format":"uuid","title":"Related Contact Id"},"inverse_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Inverse Id"}},"type":"object","required":["relationship_type","id","contact_id","related_contact_id"],"title":"RelationshipPublic"},"RelationshipUpdate":{"properties":{"relationship_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Relationship Type"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"}},"type":"object","title":"RelationshipUpdate"},"ReminderCreate":{"properties":{"title":{"type":"string","maxLength":500,"minLength":1,"title":"Title","description":"Reminder title."},"description":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Description","description":"Extra details shown with the reminder."},"remind_at":{"type":"string","format":"date-time","title":"Remind At","description":"When to fire the reminder."},"frequency":{"$ref":"#/components/schemas/ReminderFrequency","description":"How often the reminder repeats.","default":"once"},"is_active":{"type":"boolean","title":"Is Active","description":"Enable or disable without deleting.","default":true},"contact_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Contact Id"}},"type":"object","required":["title","remind_at"],"title":"ReminderCreate"},"ReminderFrequency":{"type":"string","enum":["once","daily","weekly","monthly","yearly"],"title":"ReminderFrequency"},"ReminderPublic":{"properties":{"title":{"type":"string","maxLength":500,"minLength":1,"title":"Title","description":"Reminder title."},"description":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Description","description":"Extra details shown with the reminder."},"remind_at":{"type":"string","format":"date-time","title":"Remind At","description":"When to fire the reminder."},"frequency":{"$ref":"#/components/schemas/ReminderFrequency","description":"How often the reminder repeats.","default":"once"},"is_active":{"type":"boolean","title":"Is Active","description":"Enable or disable without deleting.","default":true},"id":{"type":"string","format":"uuid","title":"Id"},"contact_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Contact Id"},"last_sent_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Sent At"},"snoozed_until":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Snoozed Until"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["title","remind_at","id","contact_id","last_sent_at","snoozed_until","created_at"],"title":"ReminderPublic"},"ReminderUpdate":{"properties":{"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"remind_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Remind At"},"frequency":{"anyOf":[{"$ref":"#/components/schemas/ReminderFrequency"},{"type":"null"}]},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"}},"type":"object","title":"ReminderUpdate"},"RemindersPublic":{"properties":{"data":{"items":{"$ref":"#/components/schemas/ReminderPublic"},"type":"array","title":"Data"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["data","count"],"title":"RemindersPublic"},"TagCreate":{"properties":{"name":{"type":"string","maxLength":100,"minLength":1,"title":"Name","description":"Tag name, 1-100 chars."},"color":{"anyOf":[{"type":"string","maxLength":7},{"type":"null"}],"title":"Color","description":"Optional hex color like #ff0000 for UI display."}},"type":"object","required":["name"],"title":"TagCreate"},"TagPublic":{"properties":{"name":{"type":"string","maxLength":100,"minLength":1,"title":"Name","description":"Tag name, 1-100 chars."},"color":{"anyOf":[{"type":"string","maxLength":7},{"type":"null"}],"title":"Color","description":"Optional hex color like #ff0000 for UI display."},"id":{"type":"string","format":"uuid","title":"Id"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["name","id","created_at"],"title":"TagPublic"},"TagSharePublic":{"properties":{"tag_id":{"type":"string","format":"uuid","title":"Tag Id"},"grantee_id":{"type":"string","format":"uuid","title":"Grantee Id"},"grantee_email":{"type":"string","title":"Grantee Email"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["tag_id","grantee_id","grantee_email","created_at"],"title":"TagSharePublic"},"TagSharesPublic":{"properties":{"data":{"items":{"$ref":"#/components/schemas/TagSharePublic"},"type":"array","title":"Data"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["data","count"],"title":"TagSharesPublic"},"TagUpdate":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":100,"minLength":1},{"type":"null"}],"title":"Name"},"color":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Color"}},"type":"object","title":"TagUpdate"},"TagsPublic":{"properties":{"data":{"items":{"$ref":"#/components/schemas/TagPublic"},"type":"array","title":"Data"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["data","count"],"title":"TagsPublic"},"Token":{"properties":{"access_token":{"type":"string","title":"Access Token"},"token_type":{"type":"string","title":"Token Type","default":"bearer"}},"type":"object","required":["access_token"],"title":"Token"},"UpdatePassword":{"properties":{"current_password":{"type":"string","maxLength":128,"minLength":8,"title":"Current Password"},"new_password":{"type":"string","maxLength":128,"minLength":8,"title":"New Password"}},"type":"object","required":["current_password","new_password"],"title":"UpdatePassword"},"UserCreate":{"properties":{"email":{"type":"string","maxLength":255,"format":"email","title":"Email","description":"Login email; must be unique."},"is_active":{"type":"boolean","title":"Is Active","description":"Whether the account can log in.","default":true},"is_superuser":{"type":"boolean","title":"Is Superuser","description":"Grants admin-only endpoints.","default":false},"full_name":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Full Name","description":"Display name; optional."},"password":{"type":"string","maxLength":128,"minLength":8,"title":"Password"}},"type":"object","required":["email","password"],"title":"UserCreate"},"UserPublic":{"properties":{"email":{"type":"string","maxLength":255,"format":"email","title":"Email","description":"Login email; must be unique."},"is_active":{"type":"boolean","title":"Is Active","description":"Whether the account can log in.","default":true},"is_superuser":{"type":"boolean","title":"Is Superuser","description":"Grants admin-only endpoints.","default":false},"full_name":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Full Name","description":"Display name; optional."},"id":{"type":"string","format":"uuid","title":"Id"},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"}},"type":"object","required":["email","id"],"title":"UserPublic"},"UserRegister":{"properties":{"email":{"type":"string","maxLength":255,"format":"email","title":"Email"},"password":{"type":"string","maxLength":128,"minLength":8,"title":"Password"},"full_name":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Full Name"}},"type":"object","required":["email","password"],"title":"UserRegister"},"UserUpdate":{"properties":{"email":{"anyOf":[{"type":"string","maxLength":255,"format":"email"},{"type":"null"}],"title":"Email"},"is_active":{"type":"boolean","title":"Is Active","description":"Whether the account can log in.","default":true},"is_superuser":{"type":"boolean","title":"Is Superuser","description":"Grants admin-only endpoints.","default":false},"full_name":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Full Name","description":"Display name; optional."},"password":{"anyOf":[{"type":"string","maxLength":128,"minLength":8},{"type":"null"}],"title":"Password"}},"type":"object","title":"UserUpdate"},"UserUpdateMe":{"properties":{"full_name":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Full Name"},"email":{"anyOf":[{"type":"string","maxLength":255,"format":"email"},{"type":"null"}],"title":"Email"}},"type":"object","title":"UserUpdateMe"},"UsersPublic":{"properties":{"data":{"items":{"$ref":"#/components/schemas/UserPublic"},"type":"array","title":"Data"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["data","count"],"title":"UsersPublic"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"WebhookEndpointBase":{"properties":{"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name","description":"Human-readable endpoint name."},"url":{"anyOf":[{"type":"string","maxLength":2048},{"type":"null"}],"title":"Url","description":"Target URL for outbound webhooks; null for inbound."},"direction":{"type":"string","maxLength":10,"title":"Direction","description":"\"inbound\" or \"outbound\"."},"event_types":{"anyOf":[{"type":"string","maxLength":1000},{"type":"null"}],"title":"Event Types","description":"Comma-separated event types (e.g. contact.created,interaction.logged)."},"is_active":{"type":"boolean","title":"Is Active","description":"Enable or disable without deleting.","default":true},"secret":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Secret","description":"HMAC secret for verifying inbound payloads."}},"type":"object","required":["name","direction"],"title":"WebhookEndpointBase"},"_MentionSourceContact":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"first_name":{"type":"string","title":"First Name"},"last_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Name"},"avatar_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Avatar Url"}},"type":"object","required":["id","first_name"],"title":"_MentionSourceContact"},"_ShareIn":{"properties":{"tag_id":{"type":"string","format":"uuid","title":"Tag Id"},"grantee_id":{"type":"string","format":"uuid","title":"Grantee Id"}},"type":"object","required":["tag_id","grantee_id"],"title":"_ShareIn"}},"securitySchemes":{"OAuth2PasswordBearer":{"type":"oauth2","flows":{"password":{"scopes":{},"tokenUrl":"/api/v1/login/access-token"}}}}}} \ No newline at end of file