diff --git a/huntflow_api_client/api.py b/huntflow_api_client/api.py index fc1d1e5..22e5397 100644 --- a/huntflow_api_client/api.py +++ b/huntflow_api_client/api.py @@ -57,6 +57,7 @@ async def request( # type: ignore[no-untyped-def] data=None, files=None, json=None, + content=None, params=None, headers=None, timeout=None, @@ -68,6 +69,7 @@ async def request( # type: ignore[no-untyped-def] data=data, files=files, json=json, + content=content, params=params, headers=headers, timeout=timeout, @@ -78,6 +80,7 @@ async def request( # type: ignore[no-untyped-def] data=data, files=files, json=json, + content=content, params=params, headers=headers, timeout=timeout, @@ -91,6 +94,7 @@ async def _request( # type: ignore[no-untyped-def] data=None, files=None, json=None, + content=None, params=None, headers=None, timeout=None, @@ -104,6 +108,7 @@ async def _request( # type: ignore[no-untyped-def] data=data, files=files, json=json, + content=content, params=params, headers=headers, timeout=timeout, diff --git a/huntflow_api_client/entities/account_offers.py b/huntflow_api_client/entities/account_offers.py index 501a29a..813d4b0 100644 --- a/huntflow_api_client/entities/account_offers.py +++ b/huntflow_api_client/entities/account_offers.py @@ -15,7 +15,7 @@ async def list(self, account_id: int) -> AccountOffersListResponse: :return: List of organization's offers """ response = await self._api.request("GET", f"/accounts/{account_id}/offers") - return AccountOffersListResponse.parse_obj(response.json()) + return AccountOffersListResponse.model_validate(response.json()) async def get(self, account_id: int, offer_id: int) -> AccountOfferResponse: """ @@ -28,4 +28,4 @@ async def get(self, account_id: int, offer_id: int) -> AccountOfferResponse: :return: Organization's offer with a schema of values """ response = await self._api.request("GET", f"/accounts/{account_id}/offers/{offer_id}") - return AccountOfferResponse.parse_obj(response.json()) + return AccountOfferResponse.model_validate(response.json()) diff --git a/huntflow_api_client/entities/account_vacancy_request.py b/huntflow_api_client/entities/account_vacancy_request.py index 671c9a2..bede0ba 100644 --- a/huntflow_api_client/entities/account_vacancy_request.py +++ b/huntflow_api_client/entities/account_vacancy_request.py @@ -24,7 +24,7 @@ async def list( "only_active": only_active, } response = await self._api.request("GET", path, params=params) - return AccountVacancyRequestsListResponse.parse_obj(response.json()) + return AccountVacancyRequestsListResponse.model_validate(response.json()) async def get( self, @@ -41,4 +41,4 @@ async def get( """ path = f"/accounts/{account_id}/account_vacancy_requests/{account_vacancy_request_id}" response = await self._api.request("GET", path) - return AccountVacancyRequestResponse.parse_obj(response.json()) + return AccountVacancyRequestResponse.model_validate(response.json()) diff --git a/huntflow_api_client/entities/accounts.py b/huntflow_api_client/entities/accounts.py index f95cecd..fd9585a 100644 --- a/huntflow_api_client/entities/accounts.py +++ b/huntflow_api_client/entities/accounts.py @@ -14,7 +14,7 @@ async def get_current_user(self) -> MeResponse: :return: Information about the current user """ response = await self._api.request("GET", "/me") - return MeResponse.parse_obj(response.json()) + return MeResponse.model_validate(response.json()) async def list(self) -> OrganizationsListResponse: """ @@ -24,7 +24,7 @@ async def list(self) -> OrganizationsListResponse: associated with the passed authentication """ response = await self._api.request("GET", "/accounts") - return OrganizationsListResponse.parse_obj(response.json()) + return OrganizationsListResponse.model_validate(response.json()) async def get(self, account_id: int) -> OrganizationInfoResponse: """ @@ -34,4 +34,4 @@ async def get(self, account_id: int) -> OrganizationInfoResponse: :return: Information about the specified organization """ response = await self._api.request("GET", f"/accounts/{account_id}") - return OrganizationInfoResponse.parse_obj(response.json()) + return OrganizationInfoResponse.model_validate(response.json()) diff --git a/huntflow_api_client/entities/action_logs.py b/huntflow_api_client/entities/action_logs.py index a325147..453285d 100644 --- a/huntflow_api_client/entities/action_logs.py +++ b/huntflow_api_client/entities/action_logs.py @@ -38,4 +38,4 @@ async def list( f"/accounts/{account_id}/action_logs", params=params, ) - return ActionLogsResponse.parse_obj(response.json()) + return ActionLogsResponse.model_validate(response.json()) diff --git a/huntflow_api_client/entities/applicant_logs.py b/huntflow_api_client/entities/applicant_logs.py index 32736cd..ef3966b 100644 --- a/huntflow_api_client/entities/applicant_logs.py +++ b/huntflow_api_client/entities/applicant_logs.py @@ -46,7 +46,7 @@ async def list( params["vacancy"] = vacancy response = await self._api.request("GET", path, params=params) - return ApplicantLogResponse.parse_obj(response.json()) + return ApplicantLogResponse.model_validate(response.json()) async def create( self, @@ -70,4 +70,4 @@ async def create( f"/accounts/{account_id}/applicants/{applicant_id}/logs", json=data.jsonable_dict(exclude_none=True), ) - return CreateApplicantLogResponse.parse_obj(response.json()) + return CreateApplicantLogResponse.model_validate(response.json()) diff --git a/huntflow_api_client/entities/applicant_offers.py b/huntflow_api_client/entities/applicant_offers.py index 69c72e7..155ecf6 100644 --- a/huntflow_api_client/entities/applicant_offers.py +++ b/huntflow_api_client/entities/applicant_offers.py @@ -44,7 +44,7 @@ async def update( f"/accounts/{account_id}/applicants/{applicant_id}/offers/{offer_id}", json=data.jsonable_dict(), ) - return ApplicantVacancyOfferResponse.parse_obj(response.json()) + return ApplicantVacancyOfferResponse.model_validate(response.json()) async def get( self, @@ -71,4 +71,4 @@ async def get( f"/vacancy_frames/{vacancy_frame_id}/offer", params={"normalize": normalize}, ) - return ApplicantVacancyOfferResponse.parse_obj(response.json()) + return ApplicantVacancyOfferResponse.model_validate(response.json()) diff --git a/huntflow_api_client/entities/applicant_on_vacancy.py b/huntflow_api_client/entities/applicant_on_vacancy.py index d1b433e..e65e574 100644 --- a/huntflow_api_client/entities/applicant_on_vacancy.py +++ b/huntflow_api_client/entities/applicant_on_vacancy.py @@ -35,7 +35,7 @@ async def attach_applicant_to_vacancy( f"/accounts/{account_id}/applicants/{applicant_id}/vacancy", json=data.jsonable_dict(exclude_none=True), ) - return AddApplicantToVacancyResponse.parse_obj(response.json()) + return AddApplicantToVacancyResponse.model_validate(response.json()) async def change_vacancy_status_for_applicant( self, @@ -57,7 +57,7 @@ async def change_vacancy_status_for_applicant( f"/accounts/{account_id}/applicants/{applicant_id}/vacancy", json=data.jsonable_dict(exclude_none=True), ) - return AddApplicantToVacancyResponse.parse_obj(response.json()) + return AddApplicantToVacancyResponse.model_validate(response.json()) async def move_applicant_to_child_vacancy( self, @@ -79,4 +79,4 @@ async def move_applicant_to_child_vacancy( f"/accounts/{account_id}/applicants/vacancy/{vacancy_id}/split", json=data.jsonable_dict(exclude_none=True), ) - return ApplicantVacancySplitResponse.parse_obj(response.json()) + return ApplicantVacancySplitResponse.model_validate(response.json()) diff --git a/huntflow_api_client/entities/applicant_on_vacancy_status.py b/huntflow_api_client/entities/applicant_on_vacancy_status.py index 48078e5..ea51f33 100644 --- a/huntflow_api_client/entities/applicant_on_vacancy_status.py +++ b/huntflow_api_client/entities/applicant_on_vacancy_status.py @@ -12,4 +12,4 @@ async def list(self, account_id: int) -> VacancyStatusesResponse: :return: List of available applicant on vacancy statuses (stages) """ response = await self._api.request("GET", f"/accounts/{account_id}/vacancies/statuses") - return VacancyStatusesResponse.parse_obj(response.json()) + return VacancyStatusesResponse.model_validate(response.json()) diff --git a/huntflow_api_client/entities/applicants.py b/huntflow_api_client/entities/applicants.py index 3aff027..02f1c23 100644 --- a/huntflow_api_client/entities/applicants.py +++ b/huntflow_api_client/entities/applicants.py @@ -54,7 +54,7 @@ async def list( f"/accounts/{account_id}/applicants", params=params, ) - return ApplicantListResponse.parse_obj(response.json()) + return ApplicantListResponse.model_validate(response.json()) async def create( self, @@ -73,7 +73,7 @@ async def create( f"/accounts/{account_id}/applicants", json=data.jsonable_dict(exclude_none=True), ) - return ApplicantCreateResponse.parse_obj(response.json()) + return ApplicantCreateResponse.model_validate(response.json()) async def get(self, account_id: int, applicant_id: int) -> ApplicantItem: """ @@ -88,7 +88,7 @@ async def get(self, account_id: int, applicant_id: int) -> ApplicantItem: "GET", f"/accounts/{account_id}/applicants/{applicant_id}", ) - return ApplicantItem.parse_obj(response.json()) + return ApplicantItem.model_validate(response.json()) async def patch( self, @@ -110,7 +110,7 @@ async def patch( f"/accounts/{account_id}/applicants/{applicant_id}", json=data.jsonable_dict(exclude_none=True), ) - return ApplicantItem.parse_obj(response.json()) + return ApplicantItem.model_validate(response.json()) async def delete(self, account_id: int, applicant_id: int) -> None: """ @@ -185,4 +185,4 @@ async def search_by_cursor( params["vacancy"] = vacancy if vacancy else "null" response = await self._api.request("GET", path, params=params) - return ApplicantSearchByCursorResponse.parse_obj(response.json()) + return ApplicantSearchByCursorResponse.model_validate(response.json()) diff --git a/huntflow_api_client/entities/coworkers.py b/huntflow_api_client/entities/coworkers.py index dc42301..87b036b 100644 --- a/huntflow_api_client/entities/coworkers.py +++ b/huntflow_api_client/entities/coworkers.py @@ -43,7 +43,7 @@ async def list( f"/accounts/{account_id}/coworkers", params=params, ) - return CoworkersListResponse(**response.json()) + return CoworkersListResponse.model_validate(response.json()) async def get( self, @@ -68,4 +68,4 @@ async def get( f"/accounts/{account_id}/coworkers", params=params, ) - return CoworkerResponse(**response.json()) + return CoworkerResponse.model_validate(response.json()) diff --git a/huntflow_api_client/entities/delayed_tasks.py b/huntflow_api_client/entities/delayed_tasks.py index 8290a41..d93a713 100644 --- a/huntflow_api_client/entities/delayed_tasks.py +++ b/huntflow_api_client/entities/delayed_tasks.py @@ -16,4 +16,4 @@ async def get(self, account_id: int, task_id: str) -> DelayedTaskResponse: path = f"/accounts/{account_id}/delayed_tasks/{task_id}" response = await self._api.request("GET", path) - return DelayedTaskResponse.parse_obj(response.json()) + return DelayedTaskResponse.model_validate(response.json()) diff --git a/huntflow_api_client/entities/dictionaries.py b/huntflow_api_client/entities/dictionaries.py index 9feb8d4..43e3c32 100644 --- a/huntflow_api_client/entities/dictionaries.py +++ b/huntflow_api_client/entities/dictionaries.py @@ -26,7 +26,7 @@ async def list(self, account_id: int) -> DictionariesListResponse: """ path = f"/accounts/{account_id}/dictionaries" response = await self._api.request("GET", path) - data = DictionariesListResponse.parse_obj(response.json()) + data = DictionariesListResponse.model_validate(response.json()) return data async def create( @@ -44,7 +44,7 @@ async def create( """ path = f"/accounts/{account_id}/dictionaries" response = await self._api.request("POST", path, json=data.jsonable_dict(exclude_none=True)) - return DictionaryTaskResponse.parse_obj(response.json()) + return DictionaryTaskResponse.model_validate(response.json()) async def get(self, account_id: int, dict_code: str) -> DictionaryResponse: """ @@ -57,7 +57,7 @@ async def get(self, account_id: int, dict_code: str) -> DictionaryResponse: """ path = f"/accounts/{account_id}/dictionaries/{dict_code}" response = await self._api.request("GET", path) - return DictionaryResponse.parse_obj(response.json()) + return DictionaryResponse.model_validate(response.json()) async def update( self, @@ -76,4 +76,4 @@ async def update( """ path = f"/accounts/{account_id}/dictionaries/{dict_code}" response = await self._api.request("PUT", path, json=data.jsonable_dict(exclude_none=True)) - return DictionaryTaskResponse.parse_obj(response.json()) + return DictionaryTaskResponse.model_validate(response.json()) diff --git a/huntflow_api_client/entities/divisions.py b/huntflow_api_client/entities/divisions.py index 1bfd9a6..4ab6660 100644 --- a/huntflow_api_client/entities/divisions.py +++ b/huntflow_api_client/entities/divisions.py @@ -46,7 +46,7 @@ async def list( path, params=params, ) - return DivisionsListResponse.parse_obj(response.json()) + return DivisionsListResponse.model_validate(response.json()) async def create( self, @@ -67,4 +67,4 @@ async def create( f"/accounts/{account_id}/divisions/batch", json=divisions.jsonable_dict(exclude_none=True), ) - return BatchDivisionsResponse.parse_obj(response.json()) + return BatchDivisionsResponse.model_validate(response.json()) diff --git a/huntflow_api_client/entities/email_templates.py b/huntflow_api_client/entities/email_templates.py index 9feace7..609ed08 100644 --- a/huntflow_api_client/entities/email_templates.py +++ b/huntflow_api_client/entities/email_templates.py @@ -19,4 +19,4 @@ async def list(self, account_id: int, editable: bool = False) -> MailTemplatesRe f"/accounts/{account_id}/mail/templates", params={"editable": editable}, ) - return MailTemplatesResponse.parse_obj(response.json()) + return MailTemplatesResponse.model_validate(response.json()) diff --git a/huntflow_api_client/entities/file.py b/huntflow_api_client/entities/file.py index 2cebafd..482e6dd 100644 --- a/huntflow_api_client/entities/file.py +++ b/huntflow_api_client/entities/file.py @@ -33,4 +33,4 @@ async def upload( data=data, headers=headers.jsonable_dict(exclude_none=True, by_alias=True), ) - return UploadResponse(**response.json()) + return UploadResponse.model_validate(response.json()) diff --git a/huntflow_api_client/entities/multi_vacancies.py b/huntflow_api_client/entities/multi_vacancies.py index 3e4f7cf..8f809b5 100644 --- a/huntflow_api_client/entities/multi_vacancies.py +++ b/huntflow_api_client/entities/multi_vacancies.py @@ -28,7 +28,7 @@ async def create( f"/accounts/{account_id}/multi-vacancies", json=data.jsonable_dict(exclude_none=True), ) - return MultiVacancyResponse.parse_obj(response.json()) + return MultiVacancyResponse.model_validate(response.json()) async def update( self, @@ -54,4 +54,4 @@ async def update( f"/accounts/{account_id}/multi-vacancies/{vacancy_id}", json=data.jsonable_dict(exclude_none=True), ) - return MultiVacancyResponse.parse_obj(response.json()) + return MultiVacancyResponse.model_validate(response.json()) diff --git a/huntflow_api_client/entities/organization_settings.py b/huntflow_api_client/entities/organization_settings.py index dd62c6b..353f7dd 100644 --- a/huntflow_api_client/entities/organization_settings.py +++ b/huntflow_api_client/entities/organization_settings.py @@ -19,7 +19,7 @@ async def get_hold_reasons(self, account_id: int) -> HoldReasonsListResponse: "GET", f"/accounts/{account_id}/vacancy_hold_reasons", ) - return HoldReasonsListResponse(**response.json()) + return HoldReasonsListResponse.model_validate(response.json()) async def get_close_reasons(self, account_id: int) -> CloseReasonsListResponse: """ @@ -33,7 +33,7 @@ async def get_close_reasons(self, account_id: int) -> CloseReasonsListResponse: "GET", f"/accounts/{account_id}/vacancy_close_reasons", ) - return CloseReasonsListResponse(**response.json()) + return CloseReasonsListResponse.model_validate(response.json()) async def get_applicant_survey_form( self, @@ -52,4 +52,4 @@ async def get_applicant_survey_form( "GET", f"/accounts/{account_id}/surveys/type_a/{survey_id}", ) - return BaseSurveySchemaTypeWithSchemas(**response.json()) + return BaseSurveySchemaTypeWithSchemas.model_validate(response.json()) diff --git a/huntflow_api_client/entities/production_calendars.py b/huntflow_api_client/entities/production_calendars.py index c71b730..c27536a 100644 --- a/huntflow_api_client/entities/production_calendars.py +++ b/huntflow_api_client/entities/production_calendars.py @@ -26,7 +26,7 @@ async def list(self) -> CalendarListResponse: """ path = "/production_calendars" response = await self._api.request("GET", path) - return CalendarListResponse.parse_obj(response.json()) + return CalendarListResponse.model_validate(response.json()) async def get(self, calendar_id: int) -> CalendarResponse: """ @@ -37,7 +37,7 @@ async def get(self, calendar_id: int) -> CalendarResponse: """ path = f"/production_calendars/{calendar_id}" response = await self._api.request("GET", path) - return CalendarResponse.parse_obj(response.json()) + return CalendarResponse.model_validate(response.json()) async def get_organizations_calendar(self, account_id: int) -> AccountCalendarResponse: """ @@ -48,7 +48,7 @@ async def get_organizations_calendar(self, account_id: int) -> AccountCalendarRe """ path = f"/accounts/{account_id}/calendar" response = await self._api.request("GET", path) - return AccountCalendarResponse.parse_obj(response.json()) + return AccountCalendarResponse.model_validate(response.json()) async def get_non_working_days_in_period( self, @@ -74,7 +74,7 @@ async def get_non_working_days_in_period( params["start"] = start.strftime("%Y-%m-%d") path = f"/production_calendars/{calendar_id}/days/{deadline}" response = await self._api.request("GET", path, params=params) - return NonWorkingDaysResponse.parse_obj(response.json()) + return NonWorkingDaysResponse.model_validate(response.json()) async def get_non_working_days_for_multiple_period( self, @@ -91,8 +91,8 @@ async def get_non_working_days_for_multiple_period( specified periods """ path = f"/production_calendars/{calendar_id}/days" - response = await self._api.request("POST", path, data=data.json()) - return NonWorkingDaysBulkResponse.parse_obj(response.json()) + response = await self._api.request("POST", path, content=data.model_dump_json()) + return NonWorkingDaysBulkResponse.model_validate(response.json()) async def get_deadline_date_with_non_working_days( self, @@ -130,8 +130,8 @@ async def get_multiple_deadline_dates_with_non_working_days( :return: List of deadlines """ path = f"/production_calendars/{calendar_id}/deadline" - response = await self._api.request("POST", path, data=data.json()) - return DatesBulkResponse.parse_obj(response.json()) + response = await self._api.request("POST", path, content=data.model_dump_json()) + return DatesBulkResponse.model_validate(response.json()) async def get_start_date_with_non_working_days( self, @@ -170,5 +170,5 @@ async def get_multiple_start_dates_with_non_working_days( :return: List of start dates """ path = f"/production_calendars/{calendar_id}/start" - response = await self._api.request("POST", path, data=data.json()) - return DatesBulkResponse.parse_obj(response.json()) + response = await self._api.request("POST", path, content=data.model_dump_json()) + return DatesBulkResponse.model_validate(response.json()) diff --git a/huntflow_api_client/entities/questionary.py b/huntflow_api_client/entities/questionary.py index 1c50a72..2931ad1 100644 --- a/huntflow_api_client/entities/questionary.py +++ b/huntflow_api_client/entities/questionary.py @@ -20,7 +20,7 @@ async def get_schema(self, account_id: int) -> QuestionarySchemaResponse: :return: A schema of applicant's questionary for organization """ response = await self._api.request("GET", f"/accounts/{account_id}/applicants/questionary") - return QuestionarySchemaResponse.parse_obj(response.json()) + return QuestionarySchemaResponse.model_validate(response.json()) async def create( self, diff --git a/huntflow_api_client/entities/regions.py b/huntflow_api_client/entities/regions.py index e3ae607..034d7b0 100644 --- a/huntflow_api_client/entities/regions.py +++ b/huntflow_api_client/entities/regions.py @@ -11,4 +11,4 @@ async def list(self, account_id: int) -> RegionsListResponse: :return: List of organization regions """ response = await self._api.request("GET", f"/accounts/{account_id}/regions") - return RegionsListResponse.parse_obj(response.json()) + return RegionsListResponse.model_validate(response.json()) diff --git a/huntflow_api_client/entities/rejection_reason.py b/huntflow_api_client/entities/rejection_reason.py index 7f3a246..dfa5fb2 100644 --- a/huntflow_api_client/entities/rejection_reason.py +++ b/huntflow_api_client/entities/rejection_reason.py @@ -12,4 +12,4 @@ async def list(self, account_id: int) -> RejectionReasonsListResponse: :return: List of applicant on vacancy rejection reasons """ response = await self._api.request("GET", f"/accounts/{account_id}/rejection_reasons") - return RejectionReasonsListResponse.parse_obj(response.json()) + return RejectionReasonsListResponse.model_validate(response.json()) diff --git a/huntflow_api_client/entities/resume.py b/huntflow_api_client/entities/resume.py index d010976..e664937 100644 --- a/huntflow_api_client/entities/resume.py +++ b/huntflow_api_client/entities/resume.py @@ -31,7 +31,7 @@ async def get( "GET", f"/accounts/{account_id}/applicants/{applicant_id}/externals/{external_id}", ) - return ApplicantResumeResponse.parse_obj(response.json()) + return ApplicantResumeResponse.model_validate(response.json()) async def get_sources(self, account_id: int) -> ApplicantSourcesResponse: """ @@ -42,7 +42,7 @@ async def get_sources(self, account_id: int) -> ApplicantSourcesResponse: :return: List of applicant's resume sources """ response = await self._api.request("GET", f"/accounts/{account_id}/applicants/sources") - return ApplicantSourcesResponse.parse_obj(response.json()) + return ApplicantSourcesResponse.model_validate(response.json()) async def delete( self, @@ -85,7 +85,7 @@ async def update( f"/accounts/{account_id}/applicants/{applicant_id}/externals/{external_id}", json=data.jsonable_dict(exclude_none=True), ) - return ApplicantResumeResponse.parse_obj(response.json()) + return ApplicantResumeResponse.model_validate(response.json()) async def get_pdf( self, diff --git a/huntflow_api_client/entities/tags.py b/huntflow_api_client/entities/tags.py index c1c8861..d4cc948 100644 --- a/huntflow_api_client/entities/tags.py +++ b/huntflow_api_client/entities/tags.py @@ -26,7 +26,7 @@ async def get(self, account_id: int, account_tag_id: int) -> AccountTagResponse: :return: The specified tag """ response = await self._api.request("GET", f"/accounts/{account_id}/tags/{account_tag_id}") - return AccountTagResponse(**response.json()) + return AccountTagResponse.model_validate(response.json()) async def create( self, @@ -45,7 +45,7 @@ async def create( f"/accounts/{account_id}/tags", json=account_tag.jsonable_dict(exclude_none=True), ) - return AccountTagResponse(**response.json()) + return AccountTagResponse.model_validate(response.json()) async def update( self, @@ -67,7 +67,7 @@ async def update( f"/accounts/{account_id}/tags/{account_tag_id}", json=data.jsonable_dict(exclude_none=True), ) - return AccountTagResponse(**response.json()) + return AccountTagResponse.model_validate(response.json()) async def delete(self, account_id: int, account_tag_id: int) -> None: """ @@ -90,7 +90,7 @@ async def list(self, account_id: int) -> AccountTagsListResponse: :return: List of tags in the organization. """ response = await self._api.request("GET", f"/accounts/{account_id}/tags") - return AccountTagsListResponse(**response.json()) + return AccountTagsListResponse.model_validate(response.json()) class ApplicantTag(BaseEntity, UpdateEntityMixin, ListEntityMixin): @@ -114,7 +114,7 @@ async def update( f"/accounts/{account_id}/applicants/{applicant_id}/tags", json=data.jsonable_dict(exclude_none=True), ) - return ApplicantTagsListResponse(**response.json()) + return ApplicantTagsListResponse.model_validate(response.json()) async def list(self, account_id: int, applicant_id: int) -> ApplicantTagsListResponse: """ @@ -129,4 +129,4 @@ async def list(self, account_id: int, applicant_id: int) -> ApplicantTagsListRes "GET", f"/accounts/{account_id}/applicants/{applicant_id}/tags", ) - return ApplicantTagsListResponse(**response.json()) + return ApplicantTagsListResponse.model_validate(response.json()) diff --git a/huntflow_api_client/entities/user_settings.py b/huntflow_api_client/entities/user_settings.py index bd31cfe..b020190 100644 --- a/huntflow_api_client/entities/user_settings.py +++ b/huntflow_api_client/entities/user_settings.py @@ -13,7 +13,7 @@ async def get_email_accounts(self) -> EmailAccountsListResponse: :return: List of user email accounts. """ response = await self._api.request("GET", "/email_accounts") - return EmailAccountsListResponse.parse_obj(response.json()) + return EmailAccountsListResponse.model_validate(response.json()) async def get_calendar_accounts(self) -> CalendarAccountsListResponse: """ @@ -22,4 +22,4 @@ async def get_calendar_accounts(self) -> CalendarAccountsListResponse: :return: List of user calendar accounts with associated calendars. """ response = await self._api.request("GET", "/calendar_accounts") - return CalendarAccountsListResponse.parse_obj(response.json()) + return CalendarAccountsListResponse.model_validate(response.json()) diff --git a/huntflow_api_client/entities/users.py b/huntflow_api_client/entities/users.py index 138093c..c7ed59b 100644 --- a/huntflow_api_client/entities/users.py +++ b/huntflow_api_client/entities/users.py @@ -13,4 +13,4 @@ async def get(self, account_id: int, user_id: int) -> UserResponse: :return: The specified user with a list of his permissions """ response = await self._api.request("GET", f"/accounts/{account_id}/users/{user_id}") - return UserResponse.parse_obj(response.json()) + return UserResponse.model_validate(response.json()) diff --git a/huntflow_api_client/entities/vacancies.py b/huntflow_api_client/entities/vacancies.py index 93bc37f..c0248de 100644 --- a/huntflow_api_client/entities/vacancies.py +++ b/huntflow_api_client/entities/vacancies.py @@ -39,7 +39,7 @@ async def get_additional_fields_schema( "GET", f"/accounts/{account_id}/vacancies/additional_fields", ) - return AdditionalFieldsSchemaResponse(**response.json()) + return AdditionalFieldsSchemaResponse.model_validate(response.json()) async def list( self, @@ -71,7 +71,7 @@ async def list( f"/accounts/{account_id}/vacancies", params=params, ) - return VacancyListResponse(**response.json()) + return VacancyListResponse.model_validate(response.json()) async def get(self, account_id: int, vacancy_id: int) -> VacancyResponse: """ @@ -83,7 +83,7 @@ async def get(self, account_id: int, vacancy_id: int) -> VacancyResponse: :return: The specified vacancy """ response = await self._api.request("GET", f"/accounts/{account_id}/vacancies/{vacancy_id}") - return VacancyResponse(**response.json()) + return VacancyResponse.model_validate(response.json()) async def create(self, account_id: int, data: VacancyCreateRequest) -> VacancyCreateResponse: """ @@ -98,7 +98,7 @@ async def create(self, account_id: int, data: VacancyCreateRequest) -> VacancyCr f"/accounts/{account_id}/vacancies", json=data.jsonable_dict(exclude_none=True), ) - return VacancyCreateResponse(**response.json()) + return VacancyCreateResponse.model_validate(response.json()) async def update( self, @@ -120,7 +120,7 @@ async def update( f"/accounts/{account_id}/vacancies/{vacancy_id}", json=data.jsonable_dict(exclude_none=True), ) - return VacancyResponse(**response.json()) + return VacancyResponse.model_validate(response.json()) async def delete(self, account_id: int, vacancy_id: int) -> None: """ @@ -152,7 +152,7 @@ async def patch( f"/accounts/{account_id}/vacancies/{vacancy_id}", json=data.jsonable_dict(exclude_none=True), ) - return VacancyResponse(**response.json()) + return VacancyResponse.model_validate(response.json()) async def assign_coworker( self, @@ -176,7 +176,7 @@ async def assign_coworker( f"/accounts/{account_id}/vacancies/{vacancy_id}/members/{account_member_id}", json=data.jsonable_dict(exclude_none=True), ) - return StatusResponse(**response.json()) + return StatusResponse.model_validate(response.json()) async def remove_coworker( self, @@ -214,7 +214,7 @@ async def get_frames( "GET", f"/accounts/{account_id}/vacancies/{vacancy_id}/frames", ) - return VacancyFramesListResponse(**response.json()) + return VacancyFramesListResponse.model_validate(response.json()) async def get_last_frame( self, @@ -233,7 +233,7 @@ async def get_last_frame( "GET", f"/accounts/{account_id}/vacancies/{vacancy_id}/frame", ) - return LastVacancyFrameResponse(**response.json()) + return LastVacancyFrameResponse.model_validate(response.json()) async def get_frame_quotas( self, @@ -254,7 +254,7 @@ async def get_frame_quotas( "GET", f"/accounts/{account_id}/vacancies/{vacancy_id}/frames/{frame_id}/quotas", ) - return VacancyFrameQuotasResponse(**response.json()) + return VacancyFrameQuotasResponse.model_validate(response.json()) async def get_quotas( self, @@ -279,7 +279,7 @@ async def get_quotas( f"/accounts/{account_id}/vacancies/{vacancy_id}/quotas", params=params, ) - return VacancyQuotasResponse.parse_obj(response.json()) + return VacancyQuotasResponse.model_validate(response.json()) async def get_vacancy_status_groups(self, account_id: int) -> VacancyStatusGroupsResponse: """ @@ -290,7 +290,7 @@ async def get_vacancy_status_groups(self, account_id: int) -> VacancyStatusGroup :return: List of vacancy status groups. """ response = await self._api.request("GET", f"/accounts/{account_id}/vacancies/status_groups") - return VacancyStatusGroupsResponse.parse_obj(response.json()) + return VacancyStatusGroupsResponse.model_validate(response.json()) async def close(self, account_id: int, vacancy_id: int, data: VacancyCloseRequest) -> None: """ diff --git a/huntflow_api_client/entities/vacancy_requests.py b/huntflow_api_client/entities/vacancy_requests.py index 240bd5a..b89eccb 100644 --- a/huntflow_api_client/entities/vacancy_requests.py +++ b/huntflow_api_client/entities/vacancy_requests.py @@ -44,7 +44,7 @@ async def list( params["vacancy_id"] = vacancy_id response = await self._api.request("GET", path, params=params) - return VacancyRequestListResponse.parse_obj(response.json()) + return VacancyRequestListResponse.model_validate(response.json()) async def get(self, account_id: int, vacancy_request_id: int) -> VacancyRequestResponse: """ @@ -57,7 +57,7 @@ async def get(self, account_id: int, vacancy_request_id: int) -> VacancyRequestR """ path = f"/accounts/{account_id}/vacancy_requests/{vacancy_request_id}" response = await self._api.request("GET", path) - return VacancyRequestResponse.parse_obj(response.json()) + return VacancyRequestResponse.model_validate(response.json()) async def create( self, @@ -78,4 +78,4 @@ async def create( path, json=request_data.jsonable_dict(exclude_none=True), ) - return VacancyRequestResponse.parse_obj(response.json()) + return VacancyRequestResponse.model_validate(response.json()) diff --git a/huntflow_api_client/entities/webhooks.py b/huntflow_api_client/entities/webhooks.py index 6af06aa..5c0c7a9 100644 --- a/huntflow_api_client/entities/webhooks.py +++ b/huntflow_api_client/entities/webhooks.py @@ -18,7 +18,7 @@ async def list(self, account_id: int) -> WebhooksListResponse: """ path = f"/accounts/{account_id}/hooks" response = await self._api.request("GET", path) - return WebhooksListResponse(**response.json()) + return WebhooksListResponse.model_validate(response.json()) async def create(self, account_id: int, data: WebhookRequest) -> WebhookResponse: """ @@ -30,7 +30,7 @@ async def create(self, account_id: int, data: WebhookRequest) -> WebhookResponse """ path = f"/accounts/{account_id}/hooks" response = await self._api.request("POST", path, json=data.jsonable_dict(exclude_none=True)) - return WebhookResponse(**response.json()) + return WebhookResponse.model_validate(response.json()) async def delete(self, account_id: int, webhook_id: int) -> None: """ diff --git a/huntflow_api_client/models/common.py b/huntflow_api_client/models/common.py index 4170d03..b1bbcde 100644 --- a/huntflow_api_client/models/common.py +++ b/huntflow_api_client/models/common.py @@ -1,7 +1,8 @@ import json from datetime import date, datetime -from typing import AbstractSet, Any, Callable, Dict, List, Mapping, Optional, Union +from typing import Any, Dict, List, Optional, Set, Union +import typing_extensions from pydantic import AnyHttpUrl, BaseModel, EmailStr, Field, PositiveInt from huntflow_api_client.models.consts import ( @@ -11,70 +12,63 @@ VacancyState, ) -IntStr = Union[int, str] -AbstractSetIntStr = AbstractSet[IntStr] -MappingIntStrAny = Mapping[IntStr, Any] +_FieldSet: typing_extensions.TypeAlias = "Set[int] | Set[str] | Dict[int, Any] | Dict[str, Any]" class JsonRequestModel(BaseModel): def jsonable_dict( self, *, - include: Optional[Union[AbstractSetIntStr, MappingIntStrAny]] = None, - exclude: Optional[Union[AbstractSetIntStr, MappingIntStrAny]] = None, + include: Optional[_FieldSet] = None, + exclude: Optional[_FieldSet] = None, by_alias: bool = False, - skip_defaults: Optional[bool] = None, exclude_unset: bool = False, exclude_defaults: bool = False, exclude_none: bool = False, - encoder: Optional[Callable[[Any], Any]] = None, - **dumps_kwargs: Any, + round_trip: bool = False, + warnings: bool = True, ) -> Dict[str, Any]: - params = { - "include": include, - "exclude": exclude, - "by_alias": by_alias, - "skip_defaults": skip_defaults, - "exclude_unset": exclude_unset, - "exclude_defaults": exclude_defaults, - "exclude_none": exclude_none, - "encoder": encoder, - } - return json.loads(self.json(**params, **dumps_kwargs)) # type: ignore + return json.loads( + self.model_dump_json( + include=include, + exclude=exclude, + by_alias=by_alias, + exclude_unset=exclude_unset, + exclude_defaults=exclude_defaults, + exclude_none=exclude_none, + round_trip=round_trip, + warnings=warnings, + ), + ) class PaginatedResponse(BaseModel): - page: PositiveInt = Field(..., description="Page number", example=1) - count: int = Field(..., description="Number of items per page", example=30) - total_pages: int = Field(..., description="Total number of pages", example=2) + page: PositiveInt = Field(..., description="Page number") + count: int = Field(..., description="Number of items per page") + total_pages: int = Field(..., description="Total number of pages") class Vacancy(BaseModel): account_division: Optional[PositiveInt] = Field( None, description="Division ID", - example=12, ) account_region: Optional[PositiveInt] = Field( None, description="Account region", - example=1, ) position: str = Field( ..., description="The name of the vacancy (occupation)", - example="Developer", ) company: Optional[str] = Field( None, description="Department (ignored if the DEPARTMENTS are enabled)", - example="Google", ) - money: Optional[str] = Field(None, description="Salary", example="$10000") + money: Optional[str] = Field(None, description="Salary") priority: Optional[int] = Field( None, description="The priority of a vacancy (0 for usual or 1 for high)", - example=0, ge=0, le=1, ) @@ -93,44 +87,40 @@ class FillQuota(BaseModel): vacancy_request: Optional[PositiveInt] = Field( None, description="Vacancy request ID", - example=12, ) class EditedFillQuota(FillQuota): - id: Optional[PositiveInt] = Field(None, description="Fill quota ID", example=15) + id: Optional[PositiveInt] = Field(None, description="Fill quota ID") class File(BaseModel): - id: PositiveInt = Field(..., description="File ID", example=19) + id: PositiveInt = Field(..., description="File ID") url: AnyHttpUrl = Field(..., description="File URL") - content_type: str = Field(..., description="MIME type of file", example="application/pdf") - name: str = Field(..., description="File name", example="Resume.pdf") + content_type: str = Field(..., description="MIME type of file") + name: str = Field(..., description="File name") class Applicant(BaseModel): - first_name: Optional[str] = Field(None, description="First name", example="John") - last_name: Optional[str] = Field(None, description="Last name", example="Doe") - middle_name: Optional[str] = Field(None, description="Middle name", example="Michael") - money: Optional[str] = Field(None, description="Salary expectation", example="$100000") - phone: Optional[str] = Field(None, description="Phone number", example="89999999999") + first_name: Optional[str] = Field(None, description="First name") + last_name: Optional[str] = Field(None, description="Last name") + middle_name: Optional[str] = Field(None, description="Middle name") + money: Optional[str] = Field(None, description="Salary expectation") + phone: Optional[str] = Field(None, description="Phone number") email: Union[EmailStr, str, None] = Field( None, description="Email address", - example="mail@some.domain.com", ) - skype: Optional[str] = Field(None, description="Skype login", example="my_skype") + skype: Optional[str] = Field(None, description="Skype login") position: Optional[str] = Field( None, description="Applicant’s occupation", - example="Front-end developer", ) company: Optional[str] = Field( None, description="Applicant’s place of work", - example="Google Inc.", ) - photo: Optional[int] = Field(None, description="Applicant’s photo ID", example=1) + photo: Optional[int] = Field(None, description="Applicant’s photo ID") class StatusResponse(BaseModel): @@ -188,7 +178,7 @@ class EmailFollowup(BaseModel): html: str = Field(..., description="Email content (HTML)") days: int = Field( ..., - gte=1, + ge=1, description="The number of days after which to send a followup if there is no response", ) @@ -239,7 +229,7 @@ class ApplicantOffer(BaseModel): class CalendarEventReminder(BaseModel): multiplier: EventReminderMultiplier = Field(..., description="Reminder period") - value: int = Field(..., gte=0, lt=40320, description="Reminder value") + value: int = Field(..., ge=0, lt=40320, description="Reminder value") method: CalendarEventReminderMethod = Field(..., description="Reminder method") @@ -248,5 +238,5 @@ class CalendarEventAttendee(BaseModel): name: Optional[str] = Field(None, description="Attendee name", alias="displayName") email: EmailStr = Field(..., description="Attendee email") - class Config: + class ConfigDict: allow_population_by_field_name = True diff --git a/huntflow_api_client/models/request/applicant_logs.py b/huntflow_api_client/models/request/applicant_logs.py index efaebf1..185182c 100644 --- a/huntflow_api_client/models/request/applicant_logs.py +++ b/huntflow_api_client/models/request/applicant_logs.py @@ -1,7 +1,7 @@ from datetime import datetime from typing import List, Optional -from pydantic import BaseModel, Extra, Field, PositiveInt +from pydantic import BaseModel, Field, PositiveInt from huntflow_api_client.models.common import ( ApplicantLogEmail, @@ -36,7 +36,7 @@ class ApplicantLogCalendarEvent(BaseModel): class CreateApplicantLogRequest(JsonRequestModel): - comment: Optional[str] = Field(None, description="Comment text", example="Example comment") + comment: Optional[str] = Field(None, description="Comment text") vacancy: Optional[PositiveInt] = Field( None, description=( @@ -51,9 +51,9 @@ class CreateApplicantLogRequest(JsonRequestModel): None, description="Calendar event object", ) - im: Optional[List[ApplicantLogIm]] = Field(None, max_items=1, description="Telegram message") + im: Optional[List[ApplicantLogIm]] = Field(None, max_length=1, description="Telegram message") sms: Optional[ApplicantLogSms] = Field(None, description="SMS message") survey_questionary_id: Optional[int] = Field(None, description="Survey questionary ID") - class Config: - extra = Extra.allow + class ConfigDict: + extra = "allow" diff --git a/huntflow_api_client/models/request/applicant_on_vacancy.py b/huntflow_api_client/models/request/applicant_on_vacancy.py index d7fd0e6..c7db664 100644 --- a/huntflow_api_client/models/request/applicant_on_vacancy.py +++ b/huntflow_api_client/models/request/applicant_on_vacancy.py @@ -31,12 +31,12 @@ class AddApplicantToVacancyRequest(JsonRequestModel): ) files: Optional[List[PositiveInt]] = Field( None, - max_items=15, + max_length=15, description="Upload files. The list of file's ID attached to the log", ) calendar_event: Optional[ApplicantEvent] = Field(None, description="Calendar event object") email: Optional[ApplicantLogEmail] = Field(None, description="Email object") - im: Optional[List[ApplicantLogIm]] = Field(None, max_items=1, description="Telegram message") + im: Optional[List[ApplicantLogIm]] = Field(None, max_length=1, description="Telegram message") sms: Optional[ApplicantLogSms] = Field(None, description="SMS message") applicant_offer: Optional[ApplicantOffer] = Field(None, description="Applicant's offer") survey_questionary_id: Optional[int] = Field(None, description="Survey questionary ID") @@ -60,13 +60,13 @@ class ChangeVacancyApplicantStatusRequest(JsonRequestModel): ) files: Optional[List[PositiveInt]] = Field( None, - max_items=15, + max_length=15, description="Upload files. The list of file's ID attached to the log", ) applicant_offer: Optional[ApplicantOffer] = Field(None, description="Applicant's offer") calendar_event: Optional[ApplicantEvent] = Field(None, description="Calendar event object") email: Optional[ApplicantLogEmail] = Field(None, description="Email object") - im: Optional[List[ApplicantLogIm]] = Field(None, max_items=1, description="Telegram message") + im: Optional[List[ApplicantLogIm]] = Field(None, max_length=1, description="Telegram message") sms: Optional[ApplicantLogSms] = Field(None, description="SMS message") survey_questionary_id: Optional[int] = Field(None, description="Survey questionary ID") diff --git a/huntflow_api_client/models/request/applicants.py b/huntflow_api_client/models/request/applicants.py index 3565d0d..16286ab 100644 --- a/huntflow_api_client/models/request/applicants.py +++ b/huntflow_api_client/models/request/applicants.py @@ -35,12 +35,12 @@ class ApplicantCreateRequest(Applicant, JsonRequestModel): birthday: Optional[date] = Field(None, description="Date of birth") externals: Optional[List[ApplicantResumeCreate]] = Field( None, - max_items=1, + max_length=1, description="List of applicant's resumes", ) social: List[ApplicantSocial] = Field( [], - max_items=1, + max_length=1, description="List of applicant's social accounts", ) @@ -49,13 +49,13 @@ class ApplicantUpdateRequest(Applicant, JsonRequestModel): birthday: Optional[date] = Field(None, description="Date of birth") social: Optional[List[ApplicantSocial]] = Field( None, - max_items=1, + max_length=1, description="List of applicant's social accounts", ) class ApplicantEvent(BaseModel): - vacancy: Optional[PositiveInt] = Field(None, include_in_schema=False) + vacancy: Optional[PositiveInt] = None private: bool = Field(True, description="Event private flag") name: Optional[str] = Field(None, description="Event name") reminders: Optional[List[CalendarEventReminder]] = Field( @@ -63,7 +63,7 @@ class ApplicantEvent(BaseModel): description="List of reminders RFC 5545", ) location: Optional[str] = Field(None, max_length=1024, description="Event location") - interview_type: Optional[PositiveInt] = Field(None, description="Interview type ID", example=17) + interview_type: Optional[PositiveInt] = Field(None, description="Interview type ID") event_type: CalendarEventType = Field(..., description="Calendar event type") description: Optional[str] = Field(None, description="Event description (comment)") calendar: PositiveInt = Field(..., description="Calendar ID") diff --git a/huntflow_api_client/models/request/file.py b/huntflow_api_client/models/request/file.py index 503c987..853f242 100644 --- a/huntflow_api_client/models/request/file.py +++ b/huntflow_api_client/models/request/file.py @@ -1,6 +1,6 @@ from typing import Optional -from pydantic import Field, validator +from pydantic import Field, field_validator from huntflow_api_client.models.common import JsonRequestModel @@ -27,9 +27,10 @@ class UploadFileHeaders(JsonRequestModel): alias="x-ignore-phone", ) - @validator("file_parse") + @field_validator("file_parse") + @classmethod def convert_bool_to_str(cls, value: bool) -> str: return str(value).lower() - class Config: + class ConfigDict: allow_population_by_field_name = True diff --git a/huntflow_api_client/models/request/multi_vacancies.py b/huntflow_api_client/models/request/multi_vacancies.py index f5a6be9..c00b05d 100644 --- a/huntflow_api_client/models/request/multi_vacancies.py +++ b/huntflow_api_client/models/request/multi_vacancies.py @@ -9,7 +9,7 @@ class VacancyBlock(BaseModel): - fill_quotas: List[FillQuota] = Field(..., max_items=1, description="Fill quota ID") + fill_quotas: List[FillQuota] = Field(..., max_length=1, description="Fill quota ID") money: Optional[str] = Field(None, description="Salary") priority: Optional[int] = Field( None, @@ -18,7 +18,7 @@ class VacancyBlock(BaseModel): le=1, ) - class Config: + class ConfigDict: extra = "allow" @@ -31,7 +31,6 @@ class MultiVacancyCreateRequest(JsonRequestModel): company: Optional[str] = Field( None, description="Department name (ignored if the divisions are enabled)", - example="Google", ) hidden: bool = Field(False, description="Is the vacancy hidden from coworkers?") state: VacancyCreateState = Field(VacancyCreateState.OPEN, description="The state of a vacancy") @@ -59,7 +58,7 @@ class MultiVacancyCreateRequest(JsonRequestModel): ) blocks: List[VacancyBlock] = Field(..., description="List of sub-vacancies for a multivacancy") - class Config: + class ConfigDict: extra = "allow" @@ -76,7 +75,6 @@ class MultiVacancyUpdateRequest(JsonRequestModel): company: Optional[str] = Field( None, description="Department name (ignored if the divisions are enabled)", - example="Google", ) hidden: bool = Field(False, description="Is the vacancy hidden from coworkers?") state: VacancyUpdateState = Field(VacancyUpdateState.OPEN, description="The state of a vacancy") @@ -103,7 +101,7 @@ class MultiVacancyUpdateRequest(JsonRequestModel): description="List of sub-vacancies for a multivacancy", ) - class Config: + class ConfigDict: extra = "allow" @@ -117,7 +115,7 @@ class VacancyBlockUpdatePartial(VacancyBlockUpdate): ) fill_quotas: Optional[List[EditedFillQuota]] = Field( # type: ignore None, - max_items=1, + max_length=1, description="Fill quota ID", ) diff --git a/huntflow_api_client/models/request/production_calendars.py b/huntflow_api_client/models/request/production_calendars.py index 1152cfd..4247bfa 100644 --- a/huntflow_api_client/models/request/production_calendars.py +++ b/huntflow_api_client/models/request/production_calendars.py @@ -1,7 +1,7 @@ from datetime import date from typing import List, Optional -from pydantic import BaseModel, Field +from pydantic import BaseModel, Field, RootModel class NonWorkingDays(BaseModel): @@ -9,8 +9,8 @@ class NonWorkingDays(BaseModel): start: Optional[date] = Field(None, description="Start date") -class NonWorkingDaysBulkRequest(BaseModel): - __root__: List[NonWorkingDays] +class NonWorkingDaysBulkRequest(RootModel): + root: List[NonWorkingDays] class DeadLineDate(BaseModel): @@ -18,8 +18,8 @@ class DeadLineDate(BaseModel): start: Optional[date] = Field(None, description="A date to start counting. Default is today") -class DeadLineDatesBulkRequest(BaseModel): - __root__: List[DeadLineDate] +class DeadLineDatesBulkRequest(RootModel): + root: List[DeadLineDate] class StartDate(BaseModel): @@ -30,5 +30,5 @@ class StartDate(BaseModel): ) -class StartDatesBulkRequest(BaseModel): - __root__: List[StartDate] +class StartDatesBulkRequest(RootModel): + root: List[StartDate] diff --git a/huntflow_api_client/models/request/resume.py b/huntflow_api_client/models/request/resume.py index 86c17c1..2739332 100644 --- a/huntflow_api_client/models/request/resume.py +++ b/huntflow_api_client/models/request/resume.py @@ -11,12 +11,9 @@ class ApplicantResumeUpdateData(BaseModel): class ApplicantResumeUpdateRequest(JsonRequestModel): account_source: Optional[PositiveInt] = Field(..., description="Resume source ID") - data: Optional[ApplicantResumeUpdateData] = Field( - ..., - description="Resume data", - ) + data: Optional[ApplicantResumeUpdateData] = Field(..., description="Resume data") files: Optional[List[PositiveInt]] = Field( [], - max_items=1, + max_length=1, description="Upload files
" "List of file's ID attached to the applicant resume", ) diff --git a/huntflow_api_client/models/request/vacancies.py b/huntflow_api_client/models/request/vacancies.py index 7d395a2..6c7923e 100644 --- a/huntflow_api_client/models/request/vacancies.py +++ b/huntflow_api_client/models/request/vacancies.py @@ -52,9 +52,9 @@ class VacancyCreateRequest(Vacancy, JsonRequestModel): None, description="List of file IDs attached to a vacancy.", ) - fill_quotas: List[FillQuota] = Field(..., max_items=1, description="Fill quota ID") + fill_quotas: List[FillQuota] = Field(..., max_length=1, description="Fill quota ID") - class Config: + class ConfigDict: extra = "allow" @@ -85,7 +85,7 @@ class VacancyUpdateRequest(Vacancy, JsonRequestModel): description="Vacancy close reason ID", ) - class Config: + class ConfigDict: extra = "allow" diff --git a/huntflow_api_client/models/request/vacancy_requests.py b/huntflow_api_client/models/request/vacancy_requests.py index 3b4a3e3..5fa6188 100644 --- a/huntflow_api_client/models/request/vacancy_requests.py +++ b/huntflow_api_client/models/request/vacancy_requests.py @@ -1,6 +1,6 @@ import typing as t -from pydantic import BaseModel, EmailStr, Extra, Field, PositiveInt +from pydantic import BaseModel, EmailStr, Field, PositiveInt from huntflow_api_client.models.common import JsonRequestModel @@ -36,7 +36,7 @@ class CreateVacancyRequestRequest(JsonRequestModel): max_length=255, description="The name of the vacancy (occupation)", ) - money: t.Optional[str] = Field(None, description="Salary", example="$10000") + money: t.Optional[str] = Field(None, description="Salary") attendees: t.Optional[t.List[VacancyRequestAttendee]] = Field( None, description="List of people to send a request for approval", @@ -46,5 +46,5 @@ class CreateVacancyRequestRequest(JsonRequestModel): description="List of file IDs to attach to the vacancy request.", ) - class Config: - extra = Extra.allow + class ConfigDict: + extra = "allow" diff --git a/huntflow_api_client/models/response/account_vacancy_request.py b/huntflow_api_client/models/response/account_vacancy_request.py index e504871..cef5a06 100644 --- a/huntflow_api_client/models/response/account_vacancy_request.py +++ b/huntflow_api_client/models/response/account_vacancy_request.py @@ -1,6 +1,6 @@ import typing as t -from pydantic import BaseModel, Extra, Field, PositiveInt +from pydantic import BaseModel, Field, PositiveInt from huntflow_api_client.models.consts import FieldType @@ -8,28 +8,27 @@ class AccountVacancyRequestSchemaField(BaseModel): id: PositiveInt = Field(..., description="Field ID") type: FieldType = Field(..., description="Field type") - title: t.Optional[str] = Field(None, description="Field title", example="Reason") + title: t.Optional[str] = Field(None, description="Field title") required: bool = Field(False, description="Field required flag") - order: int = Field(..., description="The order of the field on the form", example=1) + order: int = Field(..., description="The order of the field on the form") values: t.Optional[t.List] = Field( None, description="List of possible values (for fields with `select` type)", - example=["New position", "Replacing an employee"], ) - value: t.Optional[str] = Field(None, description="Default value", example="New position") + value: t.Optional[str] = Field(None, description="Default value") fields: t.Optional[t.Dict[str, "AccountVacancyRequestSchemaField"]] = Field( None, description="Nested fields", ) - class Config: - extra = Extra.allow + class ConfigDict: + extra = "allow" class AccountVacancyRequestResponse(BaseModel): - id: PositiveInt = Field(..., description="Schema ID", example=1) - account: PositiveInt = Field(..., description="Organization ID", example=11) - name: str = Field("", description="Schema name", example="IT Developers") + id: PositiveInt = Field(..., description="Schema ID") + account: PositiveInt = Field(..., description="Organization ID") + name: str = Field("", description="Schema name") attendee_required: t.Optional[bool] = Field( None, description=( @@ -41,7 +40,6 @@ class AccountVacancyRequestResponse(BaseModel): attendee_hint: str = Field( "", description="Hint under the field 'Send for approval'", - example="Send for approval", ) active: bool = Field(..., description="Schema activity flag") schema_: t.Optional[t.Dict[str, AccountVacancyRequestSchemaField]] = Field( diff --git a/huntflow_api_client/models/response/applicant_logs.py b/huntflow_api_client/models/response/applicant_logs.py index 3cba8fa..e62e433 100644 --- a/huntflow_api_client/models/response/applicant_logs.py +++ b/huntflow_api_client/models/response/applicant_logs.py @@ -1,7 +1,7 @@ from datetime import date, datetime from typing import List, Optional -from pydantic import BaseModel, Extra, Field, PositiveInt +from pydantic import BaseModel, Field, PositiveInt from huntflow_api_client.models.common import ( ApplicantOffer, @@ -97,7 +97,6 @@ class ApplicantLogCalendarEvent(BaseModel): description: Optional[str] = Field( None, description="Event description", - example="Interview with John Doe", ) timezone: Optional[str] = Field(None, description="Event time zone") start: datetime = Field(..., description="Event start date and time") @@ -185,7 +184,7 @@ class CreateApplicantLogResponse(BaseModel): created: datetime = Field(..., description="Date and time of creation of the log") employment_date: Optional[date] = Field(None, description="Employment date") applicant_offer: Optional[ApplicantOffer] = Field(..., description="Offer object") - comment: Optional[str] = Field(None, description="Comment text", example="Example comment") + comment: Optional[str] = Field(None, description="Comment text") files: List[File] = Field([], description="List of files attached to the log") calendar_event: Optional[ApplicantLogCalendarEvent] = Field( None, @@ -197,5 +196,5 @@ class CreateApplicantLogResponse(BaseModel): description="Survey Questionary", ) - class Config: - extra = Extra.allow + class ConfigDict: + extra = "allow" diff --git a/huntflow_api_client/models/response/applicant_on_vacancy.py b/huntflow_api_client/models/response/applicant_on_vacancy.py index b2c7784..9601241 100644 --- a/huntflow_api_client/models/response/applicant_on_vacancy.py +++ b/huntflow_api_client/models/response/applicant_on_vacancy.py @@ -11,7 +11,7 @@ class AddApplicantToVacancyResponse(BaseModel): status: int = Field(..., description="Vacancy status ID") rejection_reason: Optional[int] = Field(None, description="Rejection reason ID") - class Config: + class ConfigDict: allow_population_by_field_name = True @@ -22,5 +22,5 @@ class ApplicantVacancySplitResponse(BaseModel): vacancy_id: int = Field(..., alias="vacancy", description="Child vacancy ID") parent_vacancy_id: int = Field(..., alias="vacancy_parent", description="Parent vacancy ID") - class Config: + class ConfigDict: allow_population_by_field_name = True diff --git a/huntflow_api_client/models/response/applicants.py b/huntflow_api_client/models/response/applicants.py index 0238495..4c980a6 100644 --- a/huntflow_api_client/models/response/applicants.py +++ b/huntflow_api_client/models/response/applicants.py @@ -25,7 +25,7 @@ class ApplicantLink(BaseModel): ) vacancy_id: int = Field(..., alias="vacancy", description="Vacancy ID") - class Config: + class ConfigDict: allow_population_by_field_name = True @@ -71,7 +71,7 @@ class ApplicantItem(Applicant): ) birthday: Optional[date] = Field(None, description="Date of birth") created: Optional[datetime] = Field( - ..., + None, description="Date and time of adding an applicant", ) email: Union[EmailStr, str, None] = Field( diff --git a/huntflow_api_client/models/response/coworkers.py b/huntflow_api_client/models/response/coworkers.py index 5c4fe5b..44a954e 100644 --- a/huntflow_api_client/models/response/coworkers.py +++ b/huntflow_api_client/models/response/coworkers.py @@ -22,7 +22,7 @@ class CoworkerResponse(BaseModel): meta: Optional[dict] = Field(None, description="Additional meta information") permissions: List[Permission] = Field(default_factory=list, description="Coworker permissions") - class Config: + class ConfigDict: allow_population_by_field_name = True diff --git a/huntflow_api_client/models/response/file.py b/huntflow_api_client/models/response/file.py index cd74ed1..64efc22 100644 --- a/huntflow_api_client/models/response/file.py +++ b/huntflow_api_client/models/response/file.py @@ -28,8 +28,8 @@ class Experience(BaseModel): class ParsedFields(BaseModel): - name: Optional[Name] - birthdate: Optional[Birthdate] + name: Optional[Name] = None + birthdate: Optional[Birthdate] = None phones: Optional[List[str]] = Field(None, description="Phones") email: Optional[str] = Field(None, description="Email") salary: Optional[int] = Field(None, description="Salary") diff --git a/huntflow_api_client/models/response/questionary.py b/huntflow_api_client/models/response/questionary.py index c0e7852..4408fd2 100644 --- a/huntflow_api_client/models/response/questionary.py +++ b/huntflow_api_client/models/response/questionary.py @@ -1,6 +1,6 @@ import typing as t -from pydantic import BaseModel, Extra, Field +from pydantic import BaseModel, Field, RootModel from huntflow_api_client.models.consts import FieldType @@ -30,12 +30,12 @@ class QuestionaryField(BaseModel): description="Organization dictionary name (for type=dictionary)", ) - class Config: - extra = Extra.allow + class ConfigDict: + extra = "allow" -class QuestionarySchemaResponse(BaseModel): - __root__: t.Dict[str, QuestionaryField] = Field( +class QuestionarySchemaResponse(RootModel): + root: t.Dict[str, QuestionaryField] = Field( ..., description="Mapping of fields in the questionary and objects with their values", ) diff --git a/huntflow_api_client/models/response/resume.py b/huntflow_api_client/models/response/resume.py index 6054ea7..250ac1e 100644 --- a/huntflow_api_client/models/response/resume.py +++ b/huntflow_api_client/models/response/resume.py @@ -1,7 +1,7 @@ import typing as t from datetime import datetime -from pydantic import BaseModel, Extra, Field +from pydantic import BaseModel, Field from huntflow_api_client.models.common import File from huntflow_api_client.models.consts import PrecisionTypes @@ -277,8 +277,8 @@ class RawData(BaseModel): description="Resume text (for resumes with auth_type = NATIVE)", ) - class Config: - extra = Extra.allow + class ConfigDict: + extra = "allow" class ApplicantResumeResponse(ApplicantResume): diff --git a/huntflow_api_client/models/response/users.py b/huntflow_api_client/models/response/users.py index 3f51d85..79ddfab 100644 --- a/huntflow_api_client/models/response/users.py +++ b/huntflow_api_client/models/response/users.py @@ -15,5 +15,5 @@ class UserResponse(BaseModel): meta: Optional[dict] = Field(None, description="Additional meta information") permissions: List[Permission] = Field(default_factory=list, description="User permissions") - class Config: + class ConfigDict: allow_population_by_field_name = True diff --git a/huntflow_api_client/models/response/vacancies.py b/huntflow_api_client/models/response/vacancies.py index eee27b2..bc03c24 100644 --- a/huntflow_api_client/models/response/vacancies.py +++ b/huntflow_api_client/models/response/vacancies.py @@ -1,7 +1,7 @@ from datetime import datetime from typing import Dict, List, Optional -from pydantic import BaseModel, Extra, Field, PositiveInt, root_validator +from pydantic import BaseModel, Field, PositiveInt, RootModel from huntflow_api_client.models.common import File, PaginatedResponse, Vacancy, VacancyQuotaItem from huntflow_api_client.models.consts import FieldType @@ -24,18 +24,12 @@ class AccountVacancyRequestSchemaField(BaseModel): alias="fields", ) - class Config: - extra = Extra.allow - + class ConfigDict: + extra = "allow" -class AdditionalFieldsSchemaResponse(BaseModel): - __root__: Dict[str, AccountVacancyRequestSchemaField] - @root_validator(pre=True) - def prepare_data( - cls, values: Dict[str, AccountVacancyRequestSchemaField] # noqa N805 - ) -> Dict[str, Dict[str, AccountVacancyRequestSchemaField]]: - return {"__root__": values} +class AdditionalFieldsSchemaResponse(RootModel): + root: Dict[str, AccountVacancyRequestSchemaField] class VacancyItem(Vacancy): @@ -55,7 +49,7 @@ class VacancyItem(Vacancy): description="Vacancy status group ID", ) - class Config: + class ConfigDict: extra = "allow" def dict(self, *args, **kwargs): # type: ignore @@ -97,7 +91,7 @@ class VacancyResponse(VacancyChild): description="Affiliate vacancies if vacancy is a multiple", ) - class Config: + class ConfigDict: extra = "allow" def dict(self, *args, **kwargs): # type: ignore @@ -140,7 +134,7 @@ class VacancyCreateResponse(Vacancy): description="Vacancy request ID", ) - class Config: + class ConfigDict: extra = "ignore" @@ -174,8 +168,8 @@ class VacancyFrameQuotasResponse(BaseModel): items: List[VacancyQuotaItem] -class VacancyQuotasResponse(BaseModel): - __root__: Dict[str, VacancyQuotaList] = Field(..., descriptions="Vacancy quotas") +class VacancyQuotasResponse(RootModel): + root: Dict[int, VacancyQuotaList] = Field(..., description="Vacancy quotas") class VacancyStatusInGroup(BaseModel): diff --git a/pdm.lock b/pdm.lock index ef81bea..1ce21be 100644 --- a/pdm.lock +++ b/pdm.lock @@ -1,6 +1,15 @@ # This file is @generated by PDM. # It is not intended for manual editing. +[[package]] +name = "annotated-types" +version = "0.5.0" +requires_python = ">=3.7" +summary = "Reusable constraint types to use with typing.Annotated" +dependencies = [ + "typing-extensions>=4.0.0; python_version < \"3.9\"", +] + [[package]] name = "anyio" version = "3.6.2" @@ -19,8 +28,8 @@ summary = "Classes Without Boilerplate" [[package]] name = "black" -version = "23.3.0" -requires_python = ">=3.7" +version = "23.7.0" +requires_python = ">=3.8" summary = "The uncompromising code formatter." dependencies = [ "click>=8.0.0", @@ -77,18 +86,18 @@ summary = "Backport of PEP 654 (exception groups)" [[package]] name = "flake8" -version = "6.0.0" +version = "6.1.0" requires_python = ">=3.8.1" summary = "the modular source code checker: pep8 pyflakes and co" dependencies = [ "mccabe<0.8.0,>=0.7.0", - "pycodestyle<2.11.0,>=2.10.0", - "pyflakes<3.1.0,>=3.0.0", + "pycodestyle<2.12.0,>=2.11.0", + "pyflakes<3.2.0,>=3.1.0", ] [[package]] name = "flake8-bugbear" -version = "23.5.9" +version = "23.7.10" requires_python = ">=3.8.1" summary = "A plugin for flake8 finding likely bugs and design problems in your program. Contains warnings that don't belong in pyflakes and pycodestyle." dependencies = [ @@ -115,8 +124,8 @@ dependencies = [ [[package]] name = "flake8-comprehensions" -version = "3.12.0" -requires_python = ">=3.7" +version = "3.14.0" +requires_python = ">=3.8" summary = "A flake8 plugin to help you write better list/set/dict comprehensions." dependencies = [ "flake8!=3.2.0,>=3.0", @@ -132,7 +141,7 @@ dependencies = [ [[package]] name = "flake8-variables-names" -version = "0.0.5" +version = "0.0.6" requires_python = ">=3.7" summary = "A flake8 extension that helps to make more readable variables names" @@ -165,7 +174,7 @@ dependencies = [ [[package]] name = "httpx" -version = "0.24.0" +version = "0.24.1" requires_python = ">=3.7" summary = "The next generation HTTP client." dependencies = [ @@ -201,13 +210,13 @@ summary = "McCabe checker, plugin for flake8" [[package]] name = "mypy" -version = "1.3.0" -requires_python = ">=3.7" +version = "1.5.1" +requires_python = ">=3.8" summary = "Optional static typing for Python" dependencies = [ "mypy-extensions>=1.0.0", "tomli>=1.1.0; python_version < \"3.11\"", - "typing-extensions>=3.10", + "typing-extensions>=4.1.0", ] [[package]] @@ -242,28 +251,39 @@ summary = "plugin and hook calling mechanisms for python" [[package]] name = "pycodestyle" -version = "2.10.0" -requires_python = ">=3.6" +version = "2.11.0" +requires_python = ">=3.8" summary = "Python style guide checker" [[package]] name = "pydantic" -version = "1.10.7" +version = "2.3.0" requires_python = ">=3.7" -summary = "Data validation and settings management using python type hints" +summary = "Data validation using Python type hints" dependencies = [ - "typing-extensions>=4.2.0", + "annotated-types>=0.4.0", + "pydantic-core==2.6.3", + "typing-extensions>=4.6.1", +] + +[[package]] +name = "pydantic-core" +version = "2.6.3" +requires_python = ">=3.7" +summary = "" +dependencies = [ + "typing-extensions!=4.7.0,>=4.6.0", ] [[package]] name = "pyflakes" -version = "3.0.1" -requires_python = ">=3.6" +version = "3.1.0" +requires_python = ">=3.8" summary = "passive checker of Python programs" [[package]] name = "pytest" -version = "7.3.1" +version = "7.4.1" requires_python = ">=3.7" summary = "pytest: simple powerful testing with Python" dependencies = [ @@ -277,22 +297,13 @@ dependencies = [ [[package]] name = "pytest-asyncio" -version = "0.21.0" +version = "0.21.1" requires_python = ">=3.7" summary = "Pytest support for asyncio" dependencies = [ "pytest>=7.0.0", ] -[[package]] -name = "pytest-freezegun" -version = "0.4.2" -summary = "Wrap tests with fixtures in freeze_time" -dependencies = [ - "freezegun>0.3", - "pytest>=3.0.0", -] - [[package]] name = "pytest-httpx" version = "0.22.0" @@ -314,7 +325,7 @@ dependencies = [ [[package]] name = "respx" -version = "0.20.1" +version = "0.20.2" requires_python = ">=3.7" summary = "A utility for mocking out the Python HTTPX and HTTP Core libraries." dependencies = [ @@ -323,8 +334,8 @@ dependencies = [ [[package]] name = "setuptools" -version = "67.7.2" -requires_python = ">=3.7" +version = "68.1.2" +requires_python = ">=3.8" summary = "Easily download, build, install, upgrade, and uninstall Python packages" [[package]] @@ -347,7 +358,7 @@ summary = "A lil' TOML parser" [[package]] name = "typing-extensions" -version = "4.5.0" +version = "4.7.1" requires_python = ">=3.7" summary = "Backported and Experimental Type Hints for Python 3.7+" @@ -355,9 +366,13 @@ summary = "Backported and Experimental Type Hints for Python 3.7+" lock_version = "4.2" cross_platform = true groups = ["default", "lint", "test"] -content_hash = "sha256:4f924f3751260019f3113dfc4711ba904ffd7acb67603eca610128ba71f65bae" +content_hash = "sha256:73b6011b63d343544e5415c24ab7aaaa1b60a7397dbcdd28078eed6bdb187d13" [metadata.files] +"annotated-types 0.5.0" = [ + {url = "https://files.pythonhosted.org/packages/42/97/41ccb6acac36fdd13592a686a21b311418f786f519e5794b957afbcea938/annotated_types-0.5.0.tar.gz", hash = "sha256:47cdc3490d9ac1506ce92c7aaa76c579dc3509ff11e098fc867e5130ab7be802"}, + {url = "https://files.pythonhosted.org/packages/d8/f0/a2ee543a96cc624c35a9086f39b1ed2aa403c6d355dfe47a11ee5c64a164/annotated_types-0.5.0-py3-none-any.whl", hash = "sha256:58da39888f92c276ad970249761ebea80ba544b77acddaa1a4d6cf78287d45fd"}, +] "anyio 3.6.2" = [ {url = "https://files.pythonhosted.org/packages/77/2b/b4c0b7a3f3d61adb1a1e0b78f90a94e2b6162a043880704b7437ef297cad/anyio-3.6.2-py3-none-any.whl", hash = "sha256:fbbe32bd270d2a2ef3ed1c5d45041250284e31fc0a4df4a5a6071842051a51e3"}, {url = "https://files.pythonhosted.org/packages/8b/94/6928d4345f2bc1beecbff03325cad43d320717f51ab74ab5a571324f4f5a/anyio-3.6.2.tar.gz", hash = "sha256:25ea0d673ae30af41a0c442f81cf3b38c7e79fdc7b60335a4c14e05eb0947421"}, @@ -366,32 +381,29 @@ content_hash = "sha256:4f924f3751260019f3113dfc4711ba904ffd7acb67603eca610128ba7 {url = "https://files.pythonhosted.org/packages/97/90/81f95d5f705be17872843536b1868f351805acf6971251ff07c1b8334dbb/attrs-23.1.0.tar.gz", hash = "sha256:6279836d581513a26f1bf235f9acd333bc9115683f14f7e8fae46c98fc50e015"}, {url = "https://files.pythonhosted.org/packages/f0/eb/fcb708c7bf5056045e9e98f62b93bd7467eb718b0202e7698eb11d66416c/attrs-23.1.0-py3-none-any.whl", hash = "sha256:1f28b4522cdc2fb4256ac1a020c78acf9cba2c6b461ccd2c126f3aa8e8335d04"}, ] -"black 23.3.0" = [ - {url = "https://files.pythonhosted.org/packages/06/1e/273d610249f0335afb1ddb03664a03223f4826e3d1a95170a0142cb19fb4/black-23.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:6b39abdfb402002b8a7d030ccc85cf5afff64ee90fa4c5aebc531e3ad0175ddb"}, - {url = "https://files.pythonhosted.org/packages/12/4b/99c71d1cf1353edd5aff2700b8960f92e9b805c9dab72639b67dbb449d3a/black-23.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:562bd3a70495facf56814293149e51aa1be9931567474993c7942ff7d3533961"}, - {url = "https://files.pythonhosted.org/packages/13/0a/ed8b66c299e896780e4528eed4018f5b084da3b9ba4ee48328550567d866/black-23.3.0-cp38-cp38-macosx_10_16_x86_64.whl", hash = "sha256:064101748afa12ad2291c2b91c960be28b817c0c7eaa35bec09cc63aa56493c5"}, - {url = "https://files.pythonhosted.org/packages/13/25/cfa06788d0a936f2445af88f13604b5bcd5c9d050db618c718e6ebe66f74/black-23.3.0-cp39-cp39-macosx_10_16_arm64.whl", hash = "sha256:3238f2aacf827d18d26db07524e44741233ae09a584273aa059066d644ca7b30"}, - {url = "https://files.pythonhosted.org/packages/21/14/d5a2bec5fb15f9118baab7123d344646fac0b1c6939d51c2b05259cd2d9c/black-23.3.0-cp38-cp38-macosx_10_16_universal2.whl", hash = "sha256:714290490c18fb0126baa0fca0a54ee795f7502b44177e1ce7624ba1c00f2331"}, - {url = "https://files.pythonhosted.org/packages/24/eb/2d2d2c27cb64cfd073896f62a952a802cd83cf943a692a2f278525b57ca9/black-23.3.0-cp37-cp37m-macosx_10_16_x86_64.whl", hash = "sha256:1d06691f1eb8de91cd1b322f21e3bfc9efe0c7ca1f0e1eb1db44ea367dff656b"}, - {url = "https://files.pythonhosted.org/packages/27/70/07aab2623cfd3789786f17e051487a41d5657258c7b1ef8f780512ffea9c/black-23.3.0-cp310-cp310-macosx_10_16_universal2.whl", hash = "sha256:67de8d0c209eb5b330cce2469503de11bca4085880d62f1628bd9972cc3366b9"}, - {url = "https://files.pythonhosted.org/packages/29/b1/b584fc863c155653963039664a592b3327b002405043b7e761b9b0212337/black-23.3.0-cp310-cp310-macosx_10_16_x86_64.whl", hash = "sha256:7c3eb7cea23904399866c55826b31c1f55bbcd3890ce22ff70466b907b6775c2"}, - {url = "https://files.pythonhosted.org/packages/3c/d7/85f3d79f9e543402de2244c4d117793f262149e404ea0168841613c33e07/black-23.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a150542a204124ed00683f0db1f5cf1c2aaaa9cc3495b7a3b5976fb136090ab"}, - {url = "https://files.pythonhosted.org/packages/3f/0d/81dd4194ce7057c199d4f28e4c2a885082d9d929e7a55c514b23784f7787/black-23.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:11c410f71b876f961d1de77b9699ad19f939094c3a677323f43d7a29855fe326"}, - {url = "https://files.pythonhosted.org/packages/49/36/15d2122f90ff1cd70f06892ebda777b650218cf84b56b5916a993dc1359a/black-23.3.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:50cb33cac881766a5cd9913e10ff75b1e8eb71babf4c7104f2e9c52da1fb7de2"}, - {url = "https://files.pythonhosted.org/packages/49/d7/f3b7da6c772800f5375aeb050a3dcf682f0bbeb41d313c9c2820d0156e4e/black-23.3.0-cp39-cp39-macosx_10_16_x86_64.whl", hash = "sha256:92c543f6854c28a3c7f39f4d9b7694f9a6eb9d3c5e2ece488c327b6e7ea9b266"}, - {url = "https://files.pythonhosted.org/packages/69/49/7e1f0cf585b0d607aad3f971f95982cc4208fc77f92363d632d23021ee57/black-23.3.0-cp311-cp311-macosx_10_16_x86_64.whl", hash = "sha256:a6f6886c9869d4daae2d1715ce34a19bbc4b95006d20ed785ca00fa03cba312d"}, - {url = "https://files.pythonhosted.org/packages/6d/b4/0f13ab7f5e364795ff82b76b0f9a4c9c50afda6f1e2feeb8b03fdd7ec57d/black-23.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:32daa9783106c28815d05b724238e30718f34155653d4d6e125dc7daec8e260c"}, - {url = "https://files.pythonhosted.org/packages/ad/e7/4642b7f462381799393fbad894ba4b32db00870a797f0616c197b07129a9/black-23.3.0-py3-none-any.whl", hash = "sha256:ec751418022185b0c1bb7d7736e6933d40bbb14c14a0abcf9123d1b159f98dd4"}, - {url = "https://files.pythonhosted.org/packages/c0/53/42e312c17cfda5c8fc4b6b396a508218807a3fcbb963b318e49d3ddd11d5/black-23.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6f3c333ea1dd6771b2d3777482429864f8e258899f6ff05826c3a4fcc5ce3f70"}, - {url = "https://files.pythonhosted.org/packages/ca/44/eb41edd3f558a6139f09eee052dead4a7a464e563b822ddf236f5a8ee286/black-23.3.0-cp37-cp37m-win_amd64.whl", hash = "sha256:e114420bf26b90d4b9daa597351337762b63039752bdf72bf361364c1aa05925"}, - {url = "https://files.pythonhosted.org/packages/ce/f4/2b0c6ac9e1f8584296747f66dd511898b4ebd51d6510dba118279bff53b6/black-23.3.0-cp38-cp38-macosx_10_16_arm64.whl", hash = "sha256:48f9d345675bb7fbc3dd85821b12487e1b9a75242028adad0333ce36ed2a6d27"}, - {url = "https://files.pythonhosted.org/packages/d1/6e/5810b6992ed70403124c67e8b3f62858a32b35405177553f1a78ed6b6e31/black-23.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:e198cf27888ad6f4ff331ca1c48ffc038848ea9f031a3b40ba36aced7e22f2c8"}, - {url = "https://files.pythonhosted.org/packages/d6/36/66370f5017b100225ec4950a60caeef60201a10080da57ddb24124453fba/black-23.3.0.tar.gz", hash = "sha256:1c7b8d606e728a41ea1ccbd7264677e494e87cf630e399262ced92d4a8dac940"}, - {url = "https://files.pythonhosted.org/packages/d7/6f/d3832960a3b646b333b7f0d80d336a3c123012e9d9d5dba4a622b2b6181d/black-23.3.0-cp311-cp311-macosx_10_16_arm64.whl", hash = "sha256:a8a968125d0a6a404842fa1bf0b349a568634f856aa08ffaff40ae0dfa52e7c6"}, - {url = "https://files.pythonhosted.org/packages/db/f4/7908f71cc71da08df1317a3619f002cbf91927fb5d3ffc7723905a2113f7/black-23.3.0-cp310-cp310-macosx_10_16_arm64.whl", hash = "sha256:0945e13506be58bf7db93ee5853243eb368ace1c08a24c65ce108986eac65915"}, - {url = "https://files.pythonhosted.org/packages/de/b4/76f152c5eb0be5471c22cd18380d31d188930377a1a57969073b89d6615d/black-23.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:35d1381d7a22cc5b2be2f72c7dfdae4072a3336060635718cc7e1ede24221d6c"}, - {url = "https://files.pythonhosted.org/packages/eb/a5/17b40bfd9b607b69fa726b0b3a473d14b093dcd5191ea1a1dd664eccfee3/black-23.3.0-cp311-cp311-macosx_10_16_universal2.whl", hash = "sha256:c7ab5790333c448903c4b721b59c0d80b11fe5e9803d8703e84dcb8da56fec1b"}, - {url = "https://files.pythonhosted.org/packages/fd/5b/fc2d7922c1a6bb49458d424b5be71d251f2d0dc97be9534e35d171bdc653/black-23.3.0-cp39-cp39-macosx_10_16_universal2.whl", hash = "sha256:f0bd2f4a58d6666500542b26354978218a9babcdc972722f4bf90779524515f3"}, +"black 23.7.0" = [ + {url = "https://files.pythonhosted.org/packages/09/16/ec8d08d2501a39258955c16fccb55a02faa6ef44190ca9fb0b88be0f494d/black-23.7.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:642496b675095d423f9b8448243336f8ec71c9d4d57ec17bf795b67f08132a91"}, + {url = "https://files.pythonhosted.org/packages/10/bb/025dced0f7a2c00c59810700fbdab877b9a49cf817383133b79b0df5f0fe/black-23.7.0-cp310-cp310-macosx_10_16_universal2.whl", hash = "sha256:552513d5cd5694590d7ef6f46e1767a4df9af168d449ff767b13b084c020e63f"}, + {url = "https://files.pythonhosted.org/packages/13/93/b62741e817592e9dbb29935bb30daf3d7ad089dcb347e240271fe687b513/black-23.7.0-cp39-cp39-macosx_10_16_arm64.whl", hash = "sha256:8417dbd2f57b5701492cd46edcecc4f9208dc75529bcf76c514864e48da867d9"}, + {url = "https://files.pythonhosted.org/packages/32/00/70def913a7a3f870a03e469e733c53ca016e2bf8cadf90b7bc09b98022d1/black-23.7.0-cp39-cp39-macosx_10_16_universal2.whl", hash = "sha256:47e56d83aad53ca140da0af87678fb38e44fd6bc0af71eebab2d1f59b1acf1d3"}, + {url = "https://files.pythonhosted.org/packages/32/df/1d4ca6b76b0a077599b133b9c9dceea0b465938170043d886d4821809d40/black-23.7.0-py3-none-any.whl", hash = "sha256:9fd59d418c60c0348505f2ddf9609c1e1de8e7493eab96198fc89d9f865e7a96"}, + {url = "https://files.pythonhosted.org/packages/4c/a5/e9f138d6bacc9f31906cbd5afe674ed2c48c59f5a7e46bcc466d760cd375/black-23.7.0-cp311-cp311-macosx_10_16_arm64.whl", hash = "sha256:b5b0ee6d96b345a8b420100b7d71ebfdd19fab5e8301aff48ec270042cd40ac2"}, + {url = "https://files.pythonhosted.org/packages/4d/24/06c20da91df8d0b0f67e2dd3ce0feedff0b0fa6792e24e3f83452f3c38a2/black-23.7.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:831d8f54c3a8c8cf55f64d0422ee875eecac26f5f649fb6c1df65316b67c8926"}, + {url = "https://files.pythonhosted.org/packages/51/32/4dacd14494e60d93cbfaea023f9a82c1db998ddfa5a359afeaf5e2c11f8c/black-23.7.0-cp311-cp311-macosx_10_16_x86_64.whl", hash = "sha256:c333286dc3ddca6fdff74670b911cccedacb4ef0a60b34e491b8a67c833b343a"}, + {url = "https://files.pythonhosted.org/packages/51/7a/ede3fec916bb5c00005a16e60c3be9d00b076f462ee38e7b396c5fea3411/black-23.7.0-cp311-cp311-win_amd64.whl", hash = "sha256:7f3bf2dec7d541b4619b8ce526bda74a6b0bffc480a163fed32eb8b3c9aed8ad"}, + {url = "https://files.pythonhosted.org/packages/5d/f8/76aec9b0d1eb3ac1ba3c1a143eb8fa4813b8a80a59d07fe0a8e7e914ae55/black-23.7.0-cp38-cp38-macosx_10_16_universal2.whl", hash = "sha256:01ede61aac8c154b55f35301fac3e730baf0c9cf8120f65a9cd61a81cfb4a0c3"}, + {url = "https://files.pythonhosted.org/packages/7f/1a/9e58b91b6f4ecd552de530b2309b5da32cf41e2fc116c0807c0960a96708/black-23.7.0-cp39-cp39-macosx_10_16_x86_64.whl", hash = "sha256:25cc308838fe71f7065df53aedd20327969d05671bac95b38fdf37ebe70ac087"}, + {url = "https://files.pythonhosted.org/packages/8e/6f/67b20e7bd900b88cd4710fb5061e79740f360677f094271d73cbcaace43c/black-23.7.0-cp38-cp38-macosx_10_16_x86_64.whl", hash = "sha256:327a8c2550ddc573b51e2c352adb88143464bb9d92c10416feb86b0f5aee5ff6"}, + {url = "https://files.pythonhosted.org/packages/90/65/742e1dbcced37750a5c6bd450eb2ecd2b3d8eced31918be6dc0e7c23caaf/black-23.7.0-cp310-cp310-macosx_10_16_arm64.whl", hash = "sha256:5c4bc552ab52f6c1c506ccae05681fab58c3f72d59ae6e6639e8885e94fe2587"}, + {url = "https://files.pythonhosted.org/packages/a7/a4/4ce0eeaccfd2665b2020cf759b05868f9be5e22a4f96b789417fce8ec57c/black-23.7.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6d1c6022b86f83b632d06f2b02774134def5d4d4f1dac8bef16d90cda18ba28a"}, + {url = "https://files.pythonhosted.org/packages/a8/9a/eb903dd74e3dbf04981b45465b64020936317273168b4be9647c435b0f65/black-23.7.0-cp38-cp38-macosx_10_16_arm64.whl", hash = "sha256:f9062af71c59c004cd519e2fb8f5d25d39e46d3af011b41ab43b9c74e27e236f"}, + {url = "https://files.pythonhosted.org/packages/ca/4e/6d625c4030280d7c8b17e014ad6a6ba434acd8c6bd86d8f375d6a1235dfe/black-23.7.0-cp311-cp311-macosx_10_16_universal2.whl", hash = "sha256:893695a76b140881531062d48476ebe4a48f5d1e9388177e175d76234ca247cd"}, + {url = "https://files.pythonhosted.org/packages/cd/89/748f5367f98f65a92cbe6b5542bb33f44fbac25f3d3d224509ac65955441/black-23.7.0-cp38-cp38-win_amd64.whl", hash = "sha256:27eb7a0c71604d5de083757fbdb245b1a4fae60e9596514c6ec497eb63f95320"}, + {url = "https://files.pythonhosted.org/packages/e4/17/a819f00990e8cf4e652186603ddc8d29477362da2b7717858732b6abd13d/black-23.7.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:501387a9edcb75d7ae8a4412bb8749900386eaef258f1aefab18adddea1936bc"}, + {url = "https://files.pythonhosted.org/packages/e9/20/29d7a6614606785923edf9e8ec3ff630231992cc2fabc02eacb0d475372e/black-23.7.0.tar.gz", hash = "sha256:022a582720b0d9480ed82576c920a8c1dde97cc38ff11d8d8859b3bd6ca9eedb"}, + {url = "https://files.pythonhosted.org/packages/f1/7e/c8f9173e5142ff0a01e6e31b338cbda30b603a855cbb9ba7afd9552e8a36/black-23.7.0-cp39-cp39-win_amd64.whl", hash = "sha256:ad0014efc7acf0bd745792bd0d8857413652979200ab924fbf239062adc12491"}, + {url = "https://files.pythonhosted.org/packages/f4/5d/d92ee301ec03a78945bd5e9d750446449832a1bf2d12919f667baec7b404/black-23.7.0-cp310-cp310-win_amd64.whl", hash = "sha256:fb074d8b213749fa1d077d630db0d5f8cc3b2ae63587ad4116e8a436e9bbe995"}, + {url = "https://files.pythonhosted.org/packages/f5/07/24fc7f8381b18fb83adf619f137628da9993387e2a35616ee95cc4fccb5c/black-23.7.0-cp310-cp310-macosx_10_16_x86_64.whl", hash = "sha256:86cee259349b4448adb4ef9b204bb4467aae74a386bce85d56ba4f5dc0da27be"}, ] "certifi 2023.5.7" = [ {url = "https://files.pythonhosted.org/packages/93/71/752f7a4dd4c20d6b12341ed1732368546bc0ca9866139fe812f6009d9ac7/certifi-2023.5.7.tar.gz", hash = "sha256:0f0d56dc5a6ad56fd4ba36484d6cc34451e1c6548c61daad8c320169f91eddc7"}, @@ -417,13 +429,13 @@ content_hash = "sha256:4f924f3751260019f3113dfc4711ba904ffd7acb67603eca610128ba7 {url = "https://files.pythonhosted.org/packages/61/97/17ed81b7a8d24d8f69b62c0db37abbd8c0042d4b3fc429c73dab986e7483/exceptiongroup-1.1.1-py3-none-any.whl", hash = "sha256:232c37c63e4f682982c8b6459f33a8981039e5fb8756b2074364e5055c498c9e"}, {url = "https://files.pythonhosted.org/packages/cc/38/57f14ddc8e8baeddd8993a36fe57ce7b4ba174c35048b9a6d270bb01e833/exceptiongroup-1.1.1.tar.gz", hash = "sha256:d484c3090ba2889ae2928419117447a14daf3c1231d5e30d0aae34f354f01785"}, ] -"flake8 6.0.0" = [ - {url = "https://files.pythonhosted.org/packages/66/53/3ad4a3b74d609b3b9008a10075c40e7c8909eae60af53623c3888f7a529a/flake8-6.0.0.tar.gz", hash = "sha256:c61007e76655af75e6785a931f452915b371dc48f56efd765247c8fe68f2b181"}, - {url = "https://files.pythonhosted.org/packages/d9/6a/bb0122ebe280476c924470779d2595f1403878cafe3c8a343ac56a5a9c0e/flake8-6.0.0-py2.py3-none-any.whl", hash = "sha256:3833794e27ff64ea4e9cf5d410082a8b97ff1a06c16aa3d2027339cd0f1195c7"}, +"flake8 6.1.0" = [ + {url = "https://files.pythonhosted.org/packages/b0/24/bbf7175ffc47cb3d3e1eb523ddb23272968359dfcf2e1294707a2bf12fc4/flake8-6.1.0-py2.py3-none-any.whl", hash = "sha256:ffdfce58ea94c6580c77888a86506937f9a1a227dfcd15f245d694ae20a6b6e5"}, + {url = "https://files.pythonhosted.org/packages/cf/f8/bbe24f43695c0c480181e39ce910c2650c794831886ec46ddd7c40520e6a/flake8-6.1.0.tar.gz", hash = "sha256:d5b3857f07c030bdb5bf41c7f53799571d75c4491748a3adcd47de929e34cd23"}, ] -"flake8-bugbear 23.5.9" = [ - {url = "https://files.pythonhosted.org/packages/1b/ba/39f5962709c8f39949b2bd3fa80e231663f2e8411ba3a47072546772e48b/flake8_bugbear-23.5.9-py3-none-any.whl", hash = "sha256:631fa927fbc799e8ca636b849dd7dfc304812287137b6ecb3277821f028bee40"}, - {url = "https://files.pythonhosted.org/packages/33/13/f40f36309d1f483f4a829a408883a8925a4709b7d955582c2aa14908afbb/flake8-bugbear-23.5.9.tar.gz", hash = "sha256:695c84a5d7da54eb35d79a7354dbaf3aaba80de32250608868aa1c85534b2a86"}, +"flake8-bugbear 23.7.10" = [ + {url = "https://files.pythonhosted.org/packages/b6/7d/4713ba70574d1354f68e69e25c8d2347dbf5b3269ba4861a56727dc82a95/flake8-bugbear-23.7.10.tar.gz", hash = "sha256:0ebdc7d8ec1ca8bd49347694562381f099f4de2f8ec6bda7a7dca65555d9e0d4"}, + {url = "https://files.pythonhosted.org/packages/fd/30/90e1bce4df2c33e8d639f22c6fb313499df6b197f0300a177c2a69df489d/flake8_bugbear-23.7.10-py3-none-any.whl", hash = "sha256:d99d005114020fbef47ed5e4aebafd22f167f9a0fbd0d8bf3c9e90612cb25c34"}, ] "flake8-builtins 2.1.0" = [ {url = "https://files.pythonhosted.org/packages/6a/20/686c5127161dcda4ab4cb05898f2cc4bf29e3381c78a94674016729ee127/flake8_builtins-2.1.0-py3-none-any.whl", hash = "sha256:469e8f03d6d0edf4b1e62b6d5a97dce4598592c8a13ec8f0952e7a185eba50a1"}, @@ -433,16 +445,16 @@ content_hash = "sha256:4f924f3751260019f3113dfc4711ba904ffd7acb67603eca610128ba7 {url = "https://files.pythonhosted.org/packages/0e/83/814bc8eb02b8883bc004384a1fb8b1f45b4a0b892e579fec7c80a9368526/flake8-commas-2.1.0.tar.gz", hash = "sha256:940441ab8ee544df564ae3b3f49f20462d75d5c7cac2463e0b27436e2050f263"}, {url = "https://files.pythonhosted.org/packages/18/0d/41895badcdbbe84893b95c114d5bd4345d69c9d5645a42857f1ccb84d556/flake8_commas-2.1.0-py2.py3-none-any.whl", hash = "sha256:ebb96c31e01d0ef1d0685a21f3f0e2f8153a0381430e748bf0bbbb5d5b453d54"}, ] -"flake8-comprehensions 3.12.0" = [ - {url = "https://files.pythonhosted.org/packages/65/b4/9a2cbbac095aaf1e8dbe3eac55a5155cb9f7860fbb0d9fa23443b5a3afd1/flake8_comprehensions-3.12.0.tar.gz", hash = "sha256:419ef1a6e8de929203791a5e8ff5e3906caeba13eb3290eebdbf88a9078d502e"}, - {url = "https://files.pythonhosted.org/packages/9b/8d/b70f791311a8c6975c0c6634dd44db8fd712d6ad9ed6a3fe888b9be7c89b/flake8_comprehensions-3.12.0-py3-none-any.whl", hash = "sha256:013234637ec7dfcb7cd2900578fb53c512f81db909cefe371c019232695c362d"}, +"flake8-comprehensions 3.14.0" = [ + {url = "https://files.pythonhosted.org/packages/47/2b/24fa5fdcdbda36d37b20b705bba7d5439d57949dfbcdc159a7a0cd5f137b/flake8_comprehensions-3.14.0-py3-none-any.whl", hash = "sha256:7b9d07d94aa88e62099a6d1931ddf16c344d4157deedf90fe0d8ee2846f30e97"}, + {url = "https://files.pythonhosted.org/packages/d6/4e/e3324cee771c0604f0b8b82c7cfc29b41e8396c5a4a891f720a6604ec5b0/flake8_comprehensions-3.14.0.tar.gz", hash = "sha256:81768c61bfc064e1a06222df08a2580d97de10cb388694becaf987c331c6c0cf"}, ] "flake8-quotes 3.3.2" = [ {url = "https://files.pythonhosted.org/packages/88/89/7c5a8e671c17ae49e4b89b06d9d2db5608eea7c66b04d70d27390da9ddb9/flake8-quotes-3.3.2.tar.gz", hash = "sha256:6e26892b632dacba517bf27219c459a8396dcfac0f5e8204904c5a4ba9b480e1"}, ] -"flake8-variables-names 0.0.5" = [ - {url = "https://files.pythonhosted.org/packages/10/85/407cf43cfb06fc4045a384d1778675e7cf5be53c4fa93286572c311baeb9/flake8_variables_names-0.0.5-py3-none-any.whl", hash = "sha256:e3277031696bbe10b5132b49938cde1d70fcae9561533b7bd7ab8e69cb27addb"}, - {url = "https://files.pythonhosted.org/packages/80/a0/6c0a2fc99440a758b06a5c2b4af3931d521b9d2afba940e7a7adc8db9a47/flake8_variables_names-0.0.5.tar.gz", hash = "sha256:30133e14ee2300e13a60393a00f74d98110c76070ac67d1ab91606f02824a7e1"}, +"flake8-variables-names 0.0.6" = [ + {url = "https://files.pythonhosted.org/packages/3a/e8/845c33c7ac0f6c495c5cbcfebc6a281b28017570f2edea65b24daaed47f0/flake8_variables_names-0.0.6-py3-none-any.whl", hash = "sha256:4aff935d54b3f7afcd026b4dae55029877bd05a7c507b294b45bc7bf577d7b47"}, + {url = "https://files.pythonhosted.org/packages/6a/4f/a04c504e1cc53a17f296837cc98140707b45f2deaad6d3e34503c161a3b0/flake8_variables_names-0.0.6.tar.gz", hash = "sha256:292c50e4813d632aa3adcd02c185e7bb583f5fc8ebe02e70f13c958bfe46ad91"}, ] "freezegun 1.2.2" = [ {url = "https://files.pythonhosted.org/packages/1d/97/002ac49ec52858538b4aa6f6831f83c2af562c17340bdf6043be695f39ac/freezegun-1.2.2.tar.gz", hash = "sha256:cd22d1ba06941384410cd967d8a99d5ae2442f57dfafeff2fda5de8dc5c05446"}, @@ -456,9 +468,9 @@ content_hash = "sha256:4f924f3751260019f3113dfc4711ba904ffd7acb67603eca610128ba7 {url = "https://files.pythonhosted.org/packages/41/16/c809655d32fd93e688b9e2a1aaba1008118369d1eda00818f6f65eb509f8/httpcore-0.17.0.tar.gz", hash = "sha256:cc045a3241afbf60ce056202301b4d8b6af08845e3294055eb26b09913ef903c"}, {url = "https://files.pythonhosted.org/packages/6c/39/05ebe30333ec66bba849d3c25c85d759b94c43bb03b2222de051c50d4390/httpcore-0.17.0-py3-none-any.whl", hash = "sha256:0fdfea45e94f0c9fd96eab9286077f9ff788dd186635ae61b312693e4d943599"}, ] -"httpx 0.24.0" = [ - {url = "https://files.pythonhosted.org/packages/4e/c1/692013f1e6115a061a14f6c7d05947515a1eb7b85ef6e9bf0ffbf0e92738/httpx-0.24.0-py3-none-any.whl", hash = "sha256:447556b50c1921c351ea54b4fe79d91b724ed2b027462ab9a329465d147d5a4e"}, - {url = "https://files.pythonhosted.org/packages/ae/23/f7beaf11a8b95fc173b8979c4bfd23ea7711c5ebd458d657d24a59df7e9f/httpx-0.24.0.tar.gz", hash = "sha256:507d676fc3e26110d41df7d35ebd8b3b8585052450f4097401c9be59d928c63e"}, +"httpx 0.24.1" = [ + {url = "https://files.pythonhosted.org/packages/ec/91/e41f64f03d2a13aee7e8c819d82ee3aa7cdc484d18c0ae859742597d5aa0/httpx-0.24.1-py3-none-any.whl", hash = "sha256:06781eb9ac53cde990577af654bd990a4949de37a28bdb4a230d434f3a30b9bd"}, + {url = "https://files.pythonhosted.org/packages/f8/2a/114d454cb77657dbf6a293e69390b96318930ace9cd96b51b99682493276/httpx-0.24.1.tar.gz", hash = "sha256:5853a43053df830c20f8110c5e69fe44d035d850b2dfe795e196f00fdb774bdd"}, ] "idna 3.4" = [ {url = "https://files.pythonhosted.org/packages/8b/e1/43beb3d38dba6cb420cefa297822eac205a277ab43e5ba5d5c46faf96438/idna-3.4.tar.gz", hash = "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4"}, @@ -476,33 +488,34 @@ content_hash = "sha256:4f924f3751260019f3113dfc4711ba904ffd7acb67603eca610128ba7 {url = "https://files.pythonhosted.org/packages/27/1a/1f68f9ba0c207934b35b86a8ca3aad8395a3d6dd7921c0686e23853ff5a9/mccabe-0.7.0-py2.py3-none-any.whl", hash = "sha256:6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e"}, {url = "https://files.pythonhosted.org/packages/e7/ff/0ffefdcac38932a54d2b5eed4e0ba8a408f215002cd178ad1df0f2806ff8/mccabe-0.7.0.tar.gz", hash = "sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325"}, ] -"mypy 1.3.0" = [ - {url = "https://files.pythonhosted.org/packages/09/7b/8eb0d648352c61b08cb364d278b5c12c3f1c5841724fdd2929d7172b7eaf/mypy-1.3.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:f9dca1e257d4cc129517779226753dbefb4f2266c4eaad610fc15c6a7e14283e"}, - {url = "https://files.pythonhosted.org/packages/11/41/d24f93eefc89c650782bf1f9acfdb02a32f327b841058a5b0ce5857b60af/mypy-1.3.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:4c99c3ecf223cf2952638da9cd82793d8f3c0c5fa8b6ae2b2d9ed1e1ff51ba85"}, - {url = "https://files.pythonhosted.org/packages/25/c7/4735f81858a727e170279144600881fe3299aa7589ed585af6b788ea4556/mypy-1.3.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6e33bb8b2613614a33dff70565f4c803f889ebd2f859466e42b46e1df76018dd"}, - {url = "https://files.pythonhosted.org/packages/2b/27/4a26f91301804969194ee0dc9393843f10566d7fdf192ce11fc0218a989d/mypy-1.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c1eb485cea53f4f5284e5baf92902cd0088b24984f4209e25981cc359d64448d"}, - {url = "https://files.pythonhosted.org/packages/3c/5d/b87339c1fdfec7d13899cd7ad2ee992801695114c1cf9e1645da264cd437/mypy-1.3.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:74bc9b6e0e79808bf8678d7678b2ae3736ea72d56eede3820bd3849823e7f305"}, - {url = "https://files.pythonhosted.org/packages/47/f6/25c154bb1c479f2047093f0580c2c35ffc1ff007d52b7e50020cca60c010/mypy-1.3.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:76ec771e2342f1b558c36d49900dfe81d140361dd0d2df6cd71b3db1be155409"}, - {url = "https://files.pythonhosted.org/packages/4c/10/530d2df4d57f46f77b8211cf9bbe090baacff02e7076f21f1bf08148d541/mypy-1.3.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ddae0f39ca146972ff6bb4399f3b2943884a774b8771ea0a8f50e971f5ea5ba8"}, - {url = "https://files.pythonhosted.org/packages/55/e1/90487a3ea5a88b8f5c9d7fbf6f5fa7fcc8633d0132ce8364810a1da901c9/mypy-1.3.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:cbc07246253b9e3d7d74c9ff948cd0fd7a71afcc2b77c7f0a59c26e9395cb152"}, - {url = "https://files.pythonhosted.org/packages/5b/fb/0b1c90c635319b98dd65c6d6d6347413e42397e94057993011eeedeffbd9/mypy-1.3.0-cp37-cp37m-win_amd64.whl", hash = "sha256:8c5979d0deb27e0f4479bee18ea0f83732a893e81b78e62e2dda3e7e518c92ee"}, - {url = "https://files.pythonhosted.org/packages/6a/d0/4681d84878cecfd911752016ab30566366f6de7296fdc977b746eb68bf45/mypy-1.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7d23370d2a6b7a71dc65d1266f9a34e4cde9e8e21511322415db4b26f46f6b8c"}, - {url = "https://files.pythonhosted.org/packages/6a/d9/48de5203f4b6287a98fadcc47072b1bc69e3faaa39cba59a3a600b05a42c/mypy-1.3.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:6e42d29e324cdda61daaec2336c42512e59c7c375340bd202efa1fe0f7b8f8ca"}, - {url = "https://files.pythonhosted.org/packages/7e/75/021af7f0683ea19b9ad6a436e1b5c7cb39899c0f7b31040fa69b2395421e/mypy-1.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:a22435632710a4fcf8acf86cbd0d69f68ac389a3892cb23fbad176d1cddaf228"}, - {url = "https://files.pythonhosted.org/packages/86/56/08c5ff6b2139f301d9aa56cb8e7b2a24d4faa6fc3e94234dfe7eeecc9c44/mypy-1.3.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:faff86aa10c1aa4a10e1a301de160f3d8fc8703b88c7e98de46b531ff1276a9a"}, - {url = "https://files.pythonhosted.org/packages/88/0e/646696eb8fe7658b752009a495054a0214ae8e659e9cbcde8181f16ae999/mypy-1.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:658fe7b674769a0770d4b26cb4d6f005e88a442fe82446f020be8e5f5efb2fae"}, - {url = "https://files.pythonhosted.org/packages/8d/c8/681f4a19c62aa71bdc9ad3a4bc9a0fb8846bd0b5a8bc1b29d261c8025f80/mypy-1.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:550a8b3a19bb6589679a7c3c31f64312e7ff482a816c96e0cecec9ad3a7564dd"}, - {url = "https://files.pythonhosted.org/packages/90/b6/a2d2ba604982af6034e3fcad17a464a66127be47f07b4587beec76e8f80b/mypy-1.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:44797d031a41516fcf5cbfa652265bb994e53e51994c1bd649ffcd0c3a7eccbf"}, - {url = "https://files.pythonhosted.org/packages/b1/ce/8d87f684bb7e2a520cfa9cd17b8dc686a83143bb12a3e1ac4ad6d8d4825c/mypy-1.3.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:c5d2cc54175bab47011b09688b418db71403aefad07cbcd62d44010543fc143f"}, - {url = "https://files.pythonhosted.org/packages/b1/e1/399e3dfeb2842e4a2634866e4ef8b69151d465b7a5ceb648d7f1296f17d0/mypy-1.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:95d8d31a7713510685b05fbb18d6ac287a56c8f6554d88c19e73f724a445448a"}, - {url = "https://files.pythonhosted.org/packages/b8/36/6628916f94bb0816e1719117e1962750413ab408f83673ce7d571caf3960/mypy-1.3.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1c4c42c60a8103ead4c1c060ac3cdd3ff01e18fddce6f1016e08939647a0e703"}, - {url = "https://files.pythonhosted.org/packages/ba/ac/1c280246fc0c5239409f31e1a321f178ba11a9c6e5eaaf6d56f9ff627cdf/mypy-1.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e86c2c6852f62f8f2b24cb7a613ebe8e0c7dc1402c61d36a609174f63e0ff017"}, - {url = "https://files.pythonhosted.org/packages/c9/c5/f3e4ed59e08e3a728a15da198317edfcd13b7dc2215d52b5d85fce716285/mypy-1.3.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:87df44954c31d86df96c8bd6e80dfcd773473e877ac6176a8e29898bfb3501cb"}, - {url = "https://files.pythonhosted.org/packages/cd/b9/6abe1cd8ac8e70f12f43eebe6427814f9d36142d331eae5cc5bba77585a2/mypy-1.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:d0b6c62206e04061e27009481cb0ec966f7d6172b5b936f3ead3d74f29fe3dcf"}, - {url = "https://files.pythonhosted.org/packages/d8/c6/de2e214a42b63d7ea0abef9f02a6da69cad6d532165bb7a8cc8291099a0c/mypy-1.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:473117e310febe632ddf10e745a355714e771ffe534f06db40702775056614c4"}, - {url = "https://files.pythonhosted.org/packages/d9/79/82d452b409d7610944ba3a1a6079987d3ed6062cb8fe5c8850f26dafb6e0/mypy-1.3.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ebc95f8386314272bbc817026f8ce8f4f0d2ef7ae44f947c4664efac9adec929"}, - {url = "https://files.pythonhosted.org/packages/e3/f7/1fed3b24abb75f244fa6bc60ea03cd9d3d8ad225a4cfda7533042fe6d831/mypy-1.3.0-py3-none-any.whl", hash = "sha256:a8763e72d5d9574d45ce5881962bc8e9046bf7b375b0abf031f3e6811732a897"}, - {url = "https://files.pythonhosted.org/packages/f9/88/3bfe07521fb9e74b449cbc4367434067ec70bfd8a24c652fa3e0f9597389/mypy-1.3.0.tar.gz", hash = "sha256:e1f4d16e296f5135624b34e8fb741eb0eadedca90862405b1f1fde2040b9bd11"}, +"mypy 1.5.1" = [ + {url = "https://files.pythonhosted.org/packages/04/ba/117a7497a714a8a62867e752fd8ba63eeac8e9a46bc9fc24bd85b00c2c84/mypy-1.5.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:32cb59609b0534f0bd67faebb6e022fe534bdb0e2ecab4290d683d248be1b275"}, + {url = "https://files.pythonhosted.org/packages/08/dc/3d8800a45ff8b7a38125547acaf6060fda9924e855ece67ff721febf5437/mypy-1.5.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8f772942d372c8cbac575be99f9cc9d9fb3bd95c8bc2de6c01411e2c84ebca8a"}, + {url = "https://files.pythonhosted.org/packages/0e/ef/de595eb27370020ca51c35da3479733d7106201a9fe5f14d3531c8e1ee79/mypy-1.5.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:4a465ea2ca12804d5b34bb056be3a29dc47aea5973b892d0417c6a10a40b2d65"}, + {url = "https://files.pythonhosted.org/packages/27/e8/15e7c722cc0196a0ba296f86b68497c5de3b662ba6bf2c9eaabd18462974/mypy-1.5.1-cp310-cp310-win_amd64.whl", hash = "sha256:a156e6390944c265eb56afa67c74c0636f10283429171018446b732f1a05af25"}, + {url = "https://files.pythonhosted.org/packages/33/f9/c84b68e4a754f5ce200dcf0786aa489164fa9d9dee84e375bd7d99caf637/mypy-1.5.1.tar.gz", hash = "sha256:b031b9601f1060bf1281feab89697324726ba0c0bae9d7cd7ab4b690940f0b92"}, + {url = "https://files.pythonhosted.org/packages/3b/62/e4a096ff55326bddc51f2a532cede2fa2f5d02930e1085aaa4e46bf64dd7/mypy-1.5.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:51cb1323064b1099e177098cb939eab2da42fea5d818d40113957ec954fc85f4"}, + {url = "https://files.pythonhosted.org/packages/42/7a/92845ec0a26900f5de0eeedb66ae4d5ae66c557d080c22fac4f97c4f2574/mypy-1.5.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:330857f9507c24de5c5724235e66858f8364a0693894342485e543f5b07c8693"}, + {url = "https://files.pythonhosted.org/packages/45/00/9fad7fbed28a429bc5a33d8fce1b68cb96d9d248f09d63c2dec3ea93bc50/mypy-1.5.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d28ddc3e3dfeab553e743e532fb95b4e6afad51d4706dd22f28e1e5e664828d2"}, + {url = "https://files.pythonhosted.org/packages/4e/11/ac861ca5d9b16fd5b781c1941254d4e382e8eaab90e11f41f193d9222b7e/mypy-1.5.1-cp311-cp311-win_amd64.whl", hash = "sha256:159aa9acb16086b79bbb0016145034a1a05360626046a929f84579ce1666b315"}, + {url = "https://files.pythonhosted.org/packages/51/6c/b806cf96ca3236709ae41ff8fecb9c983e95c4ac9c84ccd0a7ae74230792/mypy-1.5.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:258b22210a4a258ccd077426c7a181d789d1121aca6db73a83f79372f5569ae0"}, + {url = "https://files.pythonhosted.org/packages/63/20/c55a48793a30b0786755c108d81406ce43604bc600cdcd4990cb62b37cb8/mypy-1.5.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:361da43c4f5a96173220eb53340ace68cda81845cd88218f8862dfb0adc8cddb"}, + {url = "https://files.pythonhosted.org/packages/66/40/7ba73ceb0e940d587eef9c6ba6904d368779218b3e06c1a94f509f894615/mypy-1.5.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:9fece120dbb041771a63eb95e4896791386fe287fefb2837258925b8326d6160"}, + {url = "https://files.pythonhosted.org/packages/66/51/6ef9d704c9d1f2197e2b966d0e50948879b97c6057f2652a9ba28e563c08/mypy-1.5.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:596fae69f2bfcb7305808c75c00f81fe2829b6236eadda536f00610ac5ec2243"}, + {url = "https://files.pythonhosted.org/packages/67/d8/a58b710b5644d34f6137cdc7a9ffcfd97267b32ee75289ad386852689778/mypy-1.5.1-cp38-cp38-win_amd64.whl", hash = "sha256:ff0cedc84184115202475bbb46dd99f8dcb87fe24d5d0ddfc0fe6b8575c88d2f"}, + {url = "https://files.pythonhosted.org/packages/6c/92/68315e0aec041c4a5c720289f6c3ff1234742362659f3229e1668898c250/mypy-1.5.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a9ec1f695f0c25986e6f7f8778e5ce61659063268836a38c951200c57479cc12"}, + {url = "https://files.pythonhosted.org/packages/9c/b0/b9cb9ac4253d67442f3717befc5c39eff80c4d5a3b675414a281f6fbd486/mypy-1.5.1-cp312-cp312-win_amd64.whl", hash = "sha256:82cb6193de9bbb3844bab4c7cf80e6227d5225cc7625b068a06d005d861ad5f1"}, + {url = "https://files.pythonhosted.org/packages/9d/5f/6ccabe78465c6b82a08519a52a7ffdcc450edbe7e338a223e3169cda588e/mypy-1.5.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:abed92d9c8f08643c7d831300b739562b0a6c9fcb028d211134fc9ab20ccad5d"}, + {url = "https://files.pythonhosted.org/packages/aa/a7/5caeb0b00900652cff5b39a72bb9020ec02decabf1d5e92e41722d3e9d2c/mypy-1.5.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:57b10c56016adce71fba6bc6e9fd45d8083f74361f629390c556738565af8eeb"}, + {url = "https://files.pythonhosted.org/packages/bb/a1/eb6754a227d1b94058856962a5726e519abbb89433094111eff52e405af0/mypy-1.5.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2fc3a600f749b1008cc75e02b6fb3d4db8dbcca2d733030fe7a3b3502902f161"}, + {url = "https://files.pythonhosted.org/packages/c1/6d/755ef7671bc01e2990dbd0054bd1855786b749764e35724be22d2d64c11d/mypy-1.5.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:5d627124700b92b6bbaa99f27cbe615c8ea7b3402960f6372ea7d65faf376c14"}, + {url = "https://files.pythonhosted.org/packages/c3/e5/d0314a7cc4c11a4ce4a96cac9757630436a5d3fcbb6d10b04e2253cfd6a3/mypy-1.5.1-cp39-cp39-win_amd64.whl", hash = "sha256:c543214ffdd422623e9fedd0869166c2f16affe4ba37463975043ef7d2ea8770"}, + {url = "https://files.pythonhosted.org/packages/d7/e0/4f80f9d3a7dffb97d7ba3b2eb6b06011d311bfd645727e51b003db482d48/mypy-1.5.1-py3-none-any.whl", hash = "sha256:f757063a83970d67c444f6e01d9550a7402322af3557ce7630d3c957386fa8f5"}, + {url = "https://files.pythonhosted.org/packages/e3/41/8c200b001eba5cfa4f3b12abc9892b5af372da4613e77f1819cc08e2c15f/mypy-1.5.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:26fb32e4d4afa205b24bf645eddfbb36a1e17e995c5c99d6d00edb24b693406a"}, + {url = "https://files.pythonhosted.org/packages/e3/da/71b2bcbf64a1e51dd668ce1b9a149c4bdada0fb1b8cd023b7087bf6c0ab0/mypy-1.5.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:26f71b535dfc158a71264e6dc805a9f8d2e60b67215ca0bfa26e2e1aa4d4d373"}, + {url = "https://files.pythonhosted.org/packages/e3/f2/f423ed3f405d5986e90990464cdc717a7745837e152400f4e8d6be965a35/mypy-1.5.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f33592ddf9655a4894aef22d134de7393e95fcbdc2d15c1ab65828eee5c66c70"}, + {url = "https://files.pythonhosted.org/packages/f5/e9/0207b4be5f20b15a2a8fc5507941cbf18887c026d21486ad62dd65054dc1/mypy-1.5.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6ac9c21bfe7bc9f7f1b6fae441746e6a106e48fc9de530dea29e8cd37a2c0cc4"}, + {url = "https://files.pythonhosted.org/packages/ff/87/7a81805e19648bc1f27569b1897774106aeca917b91a99998efb9a351525/mypy-1.5.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:f6b0e77db9ff4fda74de7df13f30016a0a663928d669c9f2c057048ba44f09bb"}, ] "mypy-extensions 1.0.0" = [ {url = "https://files.pythonhosted.org/packages/2a/e2/5d3f6ada4297caebe1a2add3b126fe800c96f56dbe5d1988a2cbe0b267aa/mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d"}, @@ -524,63 +537,133 @@ content_hash = "sha256:4f924f3751260019f3113dfc4711ba904ffd7acb67603eca610128ba7 {url = "https://files.pythonhosted.org/packages/9e/01/f38e2ff29715251cf25532b9082a1589ab7e4f571ced434f98d0139336dc/pluggy-1.0.0-py2.py3-none-any.whl", hash = "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3"}, {url = "https://files.pythonhosted.org/packages/a1/16/db2d7de3474b6e37cbb9c008965ee63835bba517e22cdb8c35b5116b5ce1/pluggy-1.0.0.tar.gz", hash = "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159"}, ] -"pycodestyle 2.10.0" = [ - {url = "https://files.pythonhosted.org/packages/06/6b/5ca0d12ef7dcf7d20dfa35287d02297f3e0f9e515da5183654c03a9636ce/pycodestyle-2.10.0.tar.gz", hash = "sha256:347187bdb476329d98f695c213d7295a846d1152ff4fe9bacb8a9590b8ee7053"}, - {url = "https://files.pythonhosted.org/packages/a2/54/001fdc0d69e8d0bb86c3423a6fa6dfada8cc26317c2635ab543e9ac411bd/pycodestyle-2.10.0-py2.py3-none-any.whl", hash = "sha256:8a4eaf0d0495c7395bdab3589ac2db602797d76207242c17d470186815706610"}, -] -"pydantic 1.10.7" = [ - {url = "https://files.pythonhosted.org/packages/00/43/f15d991ce715a2e7a229ef7c2534527d6fe4e5d260a675bd06615a4ede82/pydantic-1.10.7-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:976cae77ba6a49d80f461fd8bba183ff7ba79f44aa5cfa82f1346b5626542f8e"}, - {url = "https://files.pythonhosted.org/packages/05/4e/92a0c1fd305f764801dba26182b08ccf72026766fc4451d88186185467f2/pydantic-1.10.7-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:dfe2507b8ef209da71b6fb5f4e597b50c5a34b78d7e857c4f8f3115effaef5fe"}, - {url = "https://files.pythonhosted.org/packages/07/3a/5bc906697c9aa0f0fc28f81ec25995315c999fb6df7b29e56a49b08009a3/pydantic-1.10.7-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e0cfe895a504c060e5d36b287ee696e2fdad02d89e0d895f83037245218a87fe"}, - {url = "https://files.pythonhosted.org/packages/14/60/08f4b0a87561f64305002dffc5db2078043d46ed213e730a92e16840b120/pydantic-1.10.7-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:6434b49c0b03a51021ade5c4daa7d70c98f7a79e95b551201fff682fc1661245"}, - {url = "https://files.pythonhosted.org/packages/21/ab/d7d0f74be71041507fe7ab1a61a71b251fc7667e720323b1f51a039370bb/pydantic-1.10.7-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c230c0d8a322276d6e7b88c3f7ce885f9ed16e0910354510e0bae84d54991143"}, - {url = "https://files.pythonhosted.org/packages/2e/97/e1e06d17f0f928083c660f6750b321797371ebd43aa16eda0ae80a4d3a7c/pydantic-1.10.7-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:abfb7d4a7cd5cc4e1d1887c43503a7c5dd608eadf8bc615413fc498d3e4645cd"}, - {url = "https://files.pythonhosted.org/packages/31/9e/32896df239096e0052e390e90eb0d374367e74bf7ce603a62841310c34c7/pydantic-1.10.7-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:01aea3a42c13f2602b7ecbbea484a98169fb568ebd9e247593ea05f01b884b2e"}, - {url = "https://files.pythonhosted.org/packages/34/d8/fd31b8172643cbf2cfd42398cba1406ea47ca1268f5e7ba48227f06c61a6/pydantic-1.10.7-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:cc1dde4e50a5fc1336ee0581c1612215bc64ed6d28d2c7c6f25d2fe3e7c3e918"}, - {url = "https://files.pythonhosted.org/packages/38/cb/21afb81e5b3270cf5504543fb94a0d7734c4536b98c893701842602f9da0/pydantic-1.10.7-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:f4a2b50e2b03d5776e7f21af73e2070e1b5c0d0df255a827e7c632962f8315af"}, - {url = "https://files.pythonhosted.org/packages/42/dc/092da33080729a95805e73084abf7cc064de7ae64462d1081859b2c1b7e2/pydantic-1.10.7-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d75ae19d2a3dbb146b6f324031c24f8a3f52ff5d6a9f22f0683694b3afcb16fb"}, - {url = "https://files.pythonhosted.org/packages/43/5f/e53a850fd32dddefc998b6bfcbda843d4ff5b0dcac02a92e414ba6c97d46/pydantic-1.10.7.tar.gz", hash = "sha256:cfc83c0678b6ba51b0532bea66860617c4cd4251ecf76e9846fa5a9f3454e97e"}, - {url = "https://files.pythonhosted.org/packages/5e/06/a6b6a325b4085558d48f8804433b523bf31b62e8bcad6a9f8537418240d6/pydantic-1.10.7-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:b0f85904f73161817b80781cc150f8b906d521fa11e3cdabae19a581c3606209"}, - {url = "https://files.pythonhosted.org/packages/67/a9/f4fde01bb028c2afd0bd053ba440f7aeb609a9dc85f5d2d41a937526dbe8/pydantic-1.10.7-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:80b1fab4deb08a8292d15e43a6edccdffa5377a36a4597bb545b93e79c5ff0a5"}, - {url = "https://files.pythonhosted.org/packages/67/ac/ff5f7eca22bf58dbecfd266597e15b1ec7ddc68b886157a2095a25eedb17/pydantic-1.10.7-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:68792151e174a4aa9e9fc1b4e653e65a354a2fa0fed169f7b3d09902ad2cb6f1"}, - {url = "https://files.pythonhosted.org/packages/73/f9/860473019e228ac0b12e5cccecc086ce1f7e41d5f1482b64b9454a528e4f/pydantic-1.10.7-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ae150a63564929c675d7f2303008d88426a0add46efd76c3fc797cd71cb1b46f"}, - {url = "https://files.pythonhosted.org/packages/7e/2f/05c7f8dbd1de1542d7560b5e7b5aeb7d58558af2262010f8de9abb466be1/pydantic-1.10.7-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:cf135c46099ff3f919d2150a948ce94b9ce545598ef2c6c7bf55dca98a304b52"}, - {url = "https://files.pythonhosted.org/packages/81/1b/04ce5303aee97af30b94c45699ed228b8ba6ba64c972efac184fb9a566f3/pydantic-1.10.7-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:516f1ed9bc2406a0467dd777afc636c7091d71f214d5e413d64fef45174cfc7a"}, - {url = "https://files.pythonhosted.org/packages/83/f2/b86db67c476177ec73fce0ea87e3fa0fd686c0602efbd4e42e5ccdb2bab9/pydantic-1.10.7-cp37-cp37m-win_amd64.whl", hash = "sha256:82dffb306dd20bd5268fd6379bc4bfe75242a9c2b79fec58e1041fbbdb1f7914"}, - {url = "https://files.pythonhosted.org/packages/8a/64/db1aafc37fab0dad89e0a27f120a18f2316fca704e9f95096ade47b933ac/pydantic-1.10.7-cp310-cp310-win_amd64.whl", hash = "sha256:a7cd2251439988b413cb0a985c4ed82b6c6aac382dbaff53ae03c4b23a70e80a"}, - {url = "https://files.pythonhosted.org/packages/8a/9b/4a6e7f721e54269966be968b7672f23b69d396ff59af7be6ea2e7bc30d0b/pydantic-1.10.7-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d2a5ebb48958754d386195fe9e9c5106f11275867051bf017a8059410e9abf1f"}, - {url = "https://files.pythonhosted.org/packages/8d/e1/d9219c4e4161a511158e531a84aa719087064d208c2bf87df5c58812f190/pydantic-1.10.7-py3-none-any.whl", hash = "sha256:0cd181f1d0b1d00e2b705f1bf1ac7799a2d938cce3376b8007df62b29be3c2c6"}, - {url = "https://files.pythonhosted.org/packages/91/b8/e02d21709db955b92125059d6f80a1a543f9cc9f60ef212621514462b4e9/pydantic-1.10.7-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:c15582f9055fbc1bfe50266a19771bbbef33dd28c45e78afbe1996fd70966c2a"}, - {url = "https://files.pythonhosted.org/packages/a0/ef/9b9a6c4f2e520c84c86908105bdec18a06449be0b2ec5c73526eba141402/pydantic-1.10.7-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7d45fc99d64af9aaf7e308054a0067fdcd87ffe974f2442312372dfa66e1001d"}, - {url = "https://files.pythonhosted.org/packages/a4/cb/16648745548e4c18f4b98b7e323bbac698e77cd8fc250a6b2ff83688c95f/pydantic-1.10.7-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:464855a7ff7f2cc2cf537ecc421291b9132aa9c79aef44e917ad711b4a93163b"}, - {url = "https://files.pythonhosted.org/packages/aa/64/1b66f84ffe07562366c5ae87e83f0b3871afefd97f0632091629e6d5cfb2/pydantic-1.10.7-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:670bb4683ad1e48b0ecb06f0cfe2178dcf74ff27921cdf1606e527d2617a81ee"}, - {url = "https://files.pythonhosted.org/packages/b8/b7/158fb5bf629f5a97c997711757fb14e831825872c6d091a41a769c9c69e4/pydantic-1.10.7-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:ecbbc51391248116c0a055899e6c3e7ffbb11fb5e2a4cd6f2d0b93272118a209"}, - {url = "https://files.pythonhosted.org/packages/c8/70/8fe094a67a9431095069f6f9eb2a893e11fdaec8c1182016f53a535adfec/pydantic-1.10.7-cp38-cp38-win_amd64.whl", hash = "sha256:9f6f0fd68d73257ad6685419478c5aece46432f4bdd8d32c7345f1986496171e"}, - {url = "https://files.pythonhosted.org/packages/c8/f3/8b3d444bdce482d6c206ab2b3ad309ae699f3074fde3d5e54c786f22b8c0/pydantic-1.10.7-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8c7f51861d73e8b9ddcb9916ae7ac39fb52761d9ea0df41128e81e2ba42886cd"}, - {url = "https://files.pythonhosted.org/packages/d1/a1/0aa23b545299186f6eabc7a5d289a951e6c033852938ae6673d75846e611/pydantic-1.10.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:10a86d8c8db68086f1e30a530f7d5f83eb0685e632e411dbbcf2d5c0150e8dcd"}, - {url = "https://files.pythonhosted.org/packages/d5/f0/a1bab22b297fc4333d496b34e0db42bc33c85c4b0e7e7a39da76fc65a643/pydantic-1.10.7-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:193924c563fae6ddcb71d3f06fa153866423ac1b793a47936656e806b64e24ca"}, - {url = "https://files.pythonhosted.org/packages/d6/59/8082b963e077ea4bec5bb85e8c0fc636e4e7b3484e6a8ceac94e743e3b74/pydantic-1.10.7-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e79e999e539872e903767c417c897e729e015872040e56b96e67968c3b918b2d"}, - {url = "https://files.pythonhosted.org/packages/dc/01/03bb09fdb5c06075c5dc79d4c68885e87fdc7e8becf347d6a1ff8f890f79/pydantic-1.10.7-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:701daea9ffe9d26f97b52f1d157e0d4121644f0fcf80b443248434958fd03dc3"}, - {url = "https://files.pythonhosted.org/packages/f1/bd/0dad4908e5f693b7951b68f435139ec583f5eebb3d75505e1efa0f2284fe/pydantic-1.10.7-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:64d34ab766fa056df49013bb6e79921a0265204c071984e75a09cbceacbbdd5d"}, - {url = "https://files.pythonhosted.org/packages/f6/2d/0fc591686bc119d844f26268f503a7a504fbc9dd6a02e14aa42738c21fed/pydantic-1.10.7-cp39-cp39-win_amd64.whl", hash = "sha256:d71e69699498b020ea198468e2480a2f1e7433e32a3a99760058c6520e2bea7e"}, - {url = "https://files.pythonhosted.org/packages/fa/c2/3df79cd00e65678fce12e59e8c95378a992a93d7b9f9510d4f1f65df1936/pydantic-1.10.7-cp311-cp311-win_amd64.whl", hash = "sha256:b4a849d10f211389502059c33332e91327bc154acc1845f375a99eca3afa802d"}, - {url = "https://files.pythonhosted.org/packages/fd/66/3da2e7c0306251435bd61ae9da52db8a00672fdf2b2db1e3efe1692f41dd/pydantic-1.10.7-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:950ce33857841f9a337ce07ddf46bc84e1c4946d2a3bba18f8280297157a3fd1"}, -] -"pyflakes 3.0.1" = [ - {url = "https://files.pythonhosted.org/packages/af/4c/b1c7008aa7788b3e26c06c60aa18da7d3aa1f00e344aa3f18ac92768854b/pyflakes-3.0.1-py2.py3-none-any.whl", hash = "sha256:ec55bf7fe21fff7f1ad2f7da62363d749e2a470500eab1b555334b67aa1ef8cf"}, - {url = "https://files.pythonhosted.org/packages/f2/51/506ddcfab10d708e8460554cc1cf37c727a6a2cccbad8dfe57766cfce33c/pyflakes-3.0.1.tar.gz", hash = "sha256:ec8b276a6b60bd80defed25add7e439881c19e64850afd9b346283d4165fd0fd"}, -] -"pytest 7.3.1" = [ - {url = "https://files.pythonhosted.org/packages/1b/d1/72df649a705af1e3a09ffe14b0c7d3be1fd730da6b98beb4a2ed26b8a023/pytest-7.3.1-py3-none-any.whl", hash = "sha256:3799fa815351fea3a5e96ac7e503a96fa51cc9942c3753cda7651b93c1cfa362"}, - {url = "https://files.pythonhosted.org/packages/ec/d9/36b65598f3d19d0a14d13dc87ad5fa42869ae53bb7471f619a30eaabc4bf/pytest-7.3.1.tar.gz", hash = "sha256:434afafd78b1d78ed0addf160ad2b77a30d35d4bdf8af234fe621919d9ed15e3"}, -] -"pytest-asyncio 0.21.0" = [ - {url = "https://files.pythonhosted.org/packages/66/73/817ddb37c627338ecbb96486c03fe69a19bef72de1b6bd641aa06fed13f4/pytest_asyncio-0.21.0-py3-none-any.whl", hash = "sha256:f2b3366b7cd501a4056858bd39349d5af19742aed2d81660b7998b6341c7eb9c"}, - {url = "https://files.pythonhosted.org/packages/85/c7/9db0c6215f12f26b590c24acc96d048e03989315f198454540dff95109cd/pytest-asyncio-0.21.0.tar.gz", hash = "sha256:2b38a496aef56f56b0e87557ec313e11e1ab9276fc3863f6a7be0f1d0e415e1b"}, -] -"pytest-freezegun 0.4.2" = [ - {url = "https://files.pythonhosted.org/packages/9e/09/0bdd7d24b9d21453ad3364ae1efbd65082045bb6081b5fd5eade91a9b644/pytest_freezegun-0.4.2-py2.py3-none-any.whl", hash = "sha256:5318a6bfb8ba4b709c8471c94d0033113877b3ee02da5bfcd917c1889cde99a7"}, - {url = "https://files.pythonhosted.org/packages/f0/e3/c39d7c3d3afef5652f19323f3483267d7e6b0d9911c3867e10d6e2d3c9ae/pytest-freezegun-0.4.2.zip", hash = "sha256:19c82d5633751bf3ec92caa481fb5cffaac1787bd485f0df6436fd6242176949"}, +"pycodestyle 2.11.0" = [ + {url = "https://files.pythonhosted.org/packages/31/c2/e1508ed4395793f69e40fd8c6b5a690e1d568e649aae9492076a7b6befb4/pycodestyle-2.11.0-py2.py3-none-any.whl", hash = "sha256:5d1013ba8dc7895b548be5afb05740ca82454fd899971563d2ef625d090326f8"}, + {url = "https://files.pythonhosted.org/packages/c1/2d/022c78a6b3f591205e52b4d25c93b7329280f752b36ba2fc1377cbf016cd/pycodestyle-2.11.0.tar.gz", hash = "sha256:259bcc17857d8a8b3b4a2327324b79e5f020a13c16074670f9c8c8f872ea76d0"}, +] +"pydantic 2.3.0" = [ + {url = "https://files.pythonhosted.org/packages/82/06/fafdc75e48b248eff364b4249af4bcc6952225e8f20e8205820afc66e88e/pydantic-2.3.0-py3-none-any.whl", hash = "sha256:45b5e446c6dfaad9444819a293b921a40e1db1aa61ea08aede0522529ce90e81"}, + {url = "https://files.pythonhosted.org/packages/fd/fe/8f08bf18b2c53afb4b358fae6e9b3501e169a2c1c9c0cd96f21a40bb7abd/pydantic-2.3.0.tar.gz", hash = "sha256:1607cc106602284cd4a00882986570472f193fde9cb1259bceeaedb26aa79a6d"}, +] +"pydantic-core 2.6.3" = [ + {url = "https://files.pythonhosted.org/packages/02/46/cb4a9d8528e4e9b585ae891553da1c187d37317d68ed841bb358442aac3d/pydantic_core-2.6.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9e9b65a55bbabda7fccd3500192a79f6e474d8d36e78d1685496aad5f9dbd92c"}, + {url = "https://files.pythonhosted.org/packages/07/c6/93977a6ac3c87f6ab73c10cf1774627a72ccda66ffcf18380c5f098292f6/pydantic_core-2.6.3-cp311-none-win_arm64.whl", hash = "sha256:5a2a3c9ef904dcdadb550eedf3291ec3f229431b0084666e2c2aa8ff99a103a2"}, + {url = "https://files.pythonhosted.org/packages/09/d9/caa996532ee725acfbd065ad932d35355a569e575e366f5ae0a59df86f24/pydantic_core-2.6.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:1fa1f6312fb84e8c281f32b39affe81984ccd484da6e9d65b3d18c202c666149"}, + {url = "https://files.pythonhosted.org/packages/09/f6/22911450873cb37dd8578009c0235f0606815aa95fb9cd58f702d714e49d/pydantic_core-2.6.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5493a7027bfc6b108e17c3383959485087d5942e87eb62bbac69829eae9bc1f7"}, + {url = "https://files.pythonhosted.org/packages/0b/06/e34be09a8faa1f3cb7b84c504fa958fbae22abad45705cf4ec615d3c81cf/pydantic_core-2.6.3-cp312-cp312-macosx_10_7_x86_64.whl", hash = "sha256:8421cf496e746cf8d6b677502ed9a0d1e4e956586cd8b221e1312e0841c002d5"}, + {url = "https://files.pythonhosted.org/packages/0b/af/363618764a1d4063407362343b1f5541fc07141176de665c9592ea68a49f/pydantic_core-2.6.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1ce8c84051fa292a5dc54018a40e2a1926fd17980a9422c973e3ebea017aa8da"}, + {url = "https://files.pythonhosted.org/packages/0c/d6/33d8077f152f0f7e5331e5bafe2f03b0c065c6572ca1d4b2d17a6fab5b7a/pydantic_core-2.6.3-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:240a015102a0c0cc8114f1cba6444499a8a4d0333e178bc504a5c2196defd456"}, + {url = "https://files.pythonhosted.org/packages/0c/f2/ed9d36aedac003c8755226e7e98c520b3a6d1c2db8d782936981bbe47ebd/pydantic_core-2.6.3-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3c8945a105f1589ce8a693753b908815e0748f6279959a4530f6742e1994dcb6"}, + {url = "https://files.pythonhosted.org/packages/15/e8/508c94592226d9ddf0696a54c9d3c03018842dedc734830de0affa9b0eef/pydantic_core-2.6.3-cp39-none-win_amd64.whl", hash = "sha256:9b33bf9658cb29ac1a517c11e865112316d09687d767d7a0e4a63d5c640d1b17"}, + {url = "https://files.pythonhosted.org/packages/18/54/6d64dff3e49e7faf4f5b989b49e46dd8b592d1e3f3db2113f4aaf1defdd3/pydantic_core-2.6.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:171a4718860790f66d6c2eda1d95dd1edf64f864d2e9f9115840840cf5b5713f"}, + {url = "https://files.pythonhosted.org/packages/18/88/2587e660641b0cccb823c576cd8d9cccbba2beae30260e849f6f9e4d87ec/pydantic_core-2.6.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f06e21ad0b504658a3a9edd3d8530e8cea5723f6ea5d280e8db8efc625b47e49"}, + {url = "https://files.pythonhosted.org/packages/1b/63/b3caf16c86c7f5fd63dadf6fa047d58cf2b58fed5fd20e5696a6a4f64431/pydantic_core-2.6.3-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b2b1bfed698fa410ab81982f681f5b1996d3d994ae8073286515ac4d165c2e7"}, + {url = "https://files.pythonhosted.org/packages/1e/8e/07c19dfa60be2e6a1a606787aa4abd6d2da7d412b1d8d90e687b0926d965/pydantic_core-2.6.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:672174480a85386dd2e681cadd7d951471ad0bb028ed744c895f11f9d51b9ebe"}, + {url = "https://files.pythonhosted.org/packages/1f/06/076ef59f71cb139e5b93483ad65da56c4f3e875f1ed54bcfbe0c98457085/pydantic_core-2.6.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:a87c54e72aa2ef30189dc74427421e074ab4561cf2bf314589f6af5b37f45e6d"}, + {url = "https://files.pythonhosted.org/packages/22/97/e2cbe6fd558c76027d9d66abd343ae0e73815b397d7dc79ac4af3777bcd5/pydantic_core-2.6.3-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:84e87c16f582f5c753b7f39a71bd6647255512191be2d2dbf49458c4ef024588"}, + {url = "https://files.pythonhosted.org/packages/24/b3/4609f29aa904826abeeadd966dd1666da9f44f513c81e6f45ba17c970e5b/pydantic_core-2.6.3-pp37-pypy37_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:692b4ff5c4e828a38716cfa92667661a39886e71136c97b7dac26edef18767f7"}, + {url = "https://files.pythonhosted.org/packages/26/00/9bf8ebd51f8e5e3f71dea9b8f3706a2289c66090fe309d04c1e04c08d6b4/pydantic_core-2.6.3-pp37-pypy37_pp73-macosx_10_7_x86_64.whl", hash = "sha256:2dd50d6a1aef0426a1d0199190c6c43ec89812b1f409e7fe44cb0fbf6dfa733c"}, + {url = "https://files.pythonhosted.org/packages/27/d2/043cfbb60e4832cacccbe82100e1c0a0fe68819d4deac0c518984d348493/pydantic_core-2.6.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:8ecbac050856eb6c3046dea655b39216597e373aa8e50e134c0e202f9c47efec"}, + {url = "https://files.pythonhosted.org/packages/28/05/a28d2a0d74a28ed4fe9c712bcf19a8488fab63214a7f3e7eb929eff10fe2/pydantic_core-2.6.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:1aa712ba150d5105814e53cb141412217146fedc22621e9acff9236d77d2a5ef"}, + {url = "https://files.pythonhosted.org/packages/29/37/eb1c5853ecaac79d2dc19be206fd6732fdfa6a6bf705048d0a1046c5fa8d/pydantic_core-2.6.3-cp311-none-win_amd64.whl", hash = "sha256:84f8bb34fe76c68c9d96b77c60cef093f5e660ef8e43a6cbfcd991017d375950"}, + {url = "https://files.pythonhosted.org/packages/2d/81/bb038964f84f8a6b5abda2cb57afd2240731b313663ceeae9b7edb150863/pydantic_core-2.6.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:e61eae9b31799c32c5f9b7be906be3380e699e74b2db26c227c50a5fc7988698"}, + {url = "https://files.pythonhosted.org/packages/2d/eb/1199be6d451694fc736b4e79b8f9634ceb610a9bc3c7549fb590fb103eee/pydantic_core-2.6.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ea053cefa008fda40f92aab937fb9f183cf8752e41dbc7bc68917884454c6362"}, + {url = "https://files.pythonhosted.org/packages/31/2a/3796bbce3843cb9f10fc2cf8776d26556353e101342ac6aab7193bc73585/pydantic_core-2.6.3-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5fa159b902d22b283b680ef52b532b29554ea2a7fc39bf354064751369e9dbd7"}, + {url = "https://files.pythonhosted.org/packages/33/3b/c8e74c5021124ff007501522b6bf8ed56c56a975954cb24ca483d7b88cff/pydantic_core-2.6.3-cp39-none-win32.whl", hash = "sha256:44b4f937b992394a2e81a5c5ce716f3dcc1237281e81b80c748b2da6dd5cf29a"}, + {url = "https://files.pythonhosted.org/packages/35/5f/f9a80b46692e52da721ee7e07e0b74032158c112179eb60cdd10bb2faccd/pydantic_core-2.6.3-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:d38bbcef58220f9c81e42c255ef0bf99735d8f11edef69ab0b499da77105158a"}, + {url = "https://files.pythonhosted.org/packages/35/b7/fe8fce6796ae947b988409326a4c7e171b364a0d55abbe6e6e26f38529d4/pydantic_core-2.6.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:5e4a2cf8c4543f37f5dc881de6c190de08096c53986381daebb56a355be5dfe6"}, + {url = "https://files.pythonhosted.org/packages/35/cc/265ddcc90040f14e7e4bd12d203692eb54e6914af020f1db56d9adfc04a4/pydantic_core-2.6.3-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:b25afe9d5c4f60dcbbe2b277a79be114e2e65a16598db8abee2a2dcde24f162b"}, + {url = "https://files.pythonhosted.org/packages/39/78/03cf262776aff1478cb04e2a99230c050b76c9854a0768f68719a828e647/pydantic_core-2.6.3-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4292ca56751aebbe63a84bbfc3b5717abb09b14d4b4442cc43fd7c49a1529efd"}, + {url = "https://files.pythonhosted.org/packages/3a/5a/37e852cee70de74babcbc6b3b5e8076d64a08577da35a2a9de72e44b6e5b/pydantic_core-2.6.3-cp39-cp39-macosx_10_7_x86_64.whl", hash = "sha256:813aab5bfb19c98ae370952b6f7190f1e28e565909bfc219a0909db168783465"}, + {url = "https://files.pythonhosted.org/packages/3b/0e/f6030be191443ea0d7b3babfb63b2dba2e13075dd714e26b772a4742d564/pydantic_core-2.6.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:19e20f8baedd7d987bd3f8005c146e6bcbda7cdeefc36fad50c66adb2dd2da48"}, + {url = "https://files.pythonhosted.org/packages/3c/ee/fde99471baf04184f13651df2f98135b865d5c1a5311ab6c942a2ee7693c/pydantic_core-2.6.3-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a892b5b1871b301ce20d40b037ffbe33d1407a39639c2b05356acfef5536d26a"}, + {url = "https://files.pythonhosted.org/packages/3d/ab/887a4e183c02d0271123773fee48bd8bfd8689ece0afc9eb5b2db32342fd/pydantic_core-2.6.3-cp37-none-win32.whl", hash = "sha256:d9b4916b21931b08096efed090327f8fe78e09ae8f5ad44e07f5c72a7eedb51b"}, + {url = "https://files.pythonhosted.org/packages/3e/b4/202942124bcd1f480f8d70a274808d544c6b2da2d86b93518514dd1f7a68/pydantic_core-2.6.3-pp39-pypy39_pp73-macosx_10_7_x86_64.whl", hash = "sha256:c9d469204abcca28926cbc28ce98f28e50e488767b084fb3fbdf21af11d3de26"}, + {url = "https://files.pythonhosted.org/packages/40/4b/676c27610e3495bf2d45753bb49516756df83f4b8e28d49ffa534d22ebc0/pydantic_core-2.6.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:bb128c30cf1df0ab78166ded1ecf876620fb9aac84d2413e8ea1594b588c735d"}, + {url = "https://files.pythonhosted.org/packages/42/6e/5f07f9c7a9190e62f2220c0376b8f8d2518246851a698b2873f771016d2d/pydantic_core-2.6.3-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:930bfe73e665ebce3f0da2c6d64455098aaa67e1a00323c74dc752627879fc67"}, + {url = "https://files.pythonhosted.org/packages/43/7d/e4c06fc30a5d8742caaca081e18db3957a450aca9c16e6099d39a0a99cc1/pydantic_core-2.6.3-pp37-pypy37_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:c8c6660089a25d45333cb9db56bb9e347241a6d7509838dbbd1931d0e19dbc7f"}, + {url = "https://files.pythonhosted.org/packages/48/8c/b6009252ad531c3b39d20f1fda91a5db050596187c70e8d39dfbe5ee9985/pydantic_core-2.6.3-pp38-pypy38_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:d9140ded382a5b04a1c030b593ed9bf3088243a0a8b7fa9f071a5736498c5483"}, + {url = "https://files.pythonhosted.org/packages/48/c5/86e2ca533641e7a21354379725f681cfb7980c93cfb4f1e3c03b3260915e/pydantic_core-2.6.3-cp311-cp311-macosx_10_7_x86_64.whl", hash = "sha256:6bcc1ad776fffe25ea5c187a028991c031a00ff92d012ca1cc4714087e575973"}, + {url = "https://files.pythonhosted.org/packages/49/4f/b19bec3633fce09636d1ae96b8ddcdf29e15c0764efe0176fc40e4afabc0/pydantic_core-2.6.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:883daa467865e5766931e07eb20f3e8152324f0adf52658f4d302242c12e2c32"}, + {url = "https://files.pythonhosted.org/packages/4b/1e/d6fd97a4ac47c26af73fe7b855b84b97a8897156956274b931798a6c720f/pydantic_core-2.6.3-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:85cc4d105747d2aa3c5cf3e37dac50141bff779545ba59a095f4a96b0a460e70"}, + {url = "https://files.pythonhosted.org/packages/4e/3d/051ad07548d576b7b3f8ac8099194215599c668fcb231faffea4b1e38c0a/pydantic_core-2.6.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d4eb77df2964b64ba190eee00b2312a1fd7a862af8918ec70fc2d6308f76ac64"}, + {url = "https://files.pythonhosted.org/packages/55/92/714a0af3ce3a34b9f0d11f2abece455174bab68c3fce350ed24fceb7dac9/pydantic_core-2.6.3-cp312-none-win_amd64.whl", hash = "sha256:23470a23614c701b37252618e7851e595060a96a23016f9a084f3f92f5ed5881"}, + {url = "https://files.pythonhosted.org/packages/56/cb/a8f3bd21ce196c5b5e924d975dfa013c00ca4e5005b5e3dc0dd879c49352/pydantic_core-2.6.3-cp37-cp37m-macosx_11_0_arm64.whl", hash = "sha256:f2969e8f72c6236c51f91fbb79c33821d12a811e2a94b7aa59c65f8dbdfad34a"}, + {url = "https://files.pythonhosted.org/packages/56/f9/851d1a5f5cacc908192a0452ee20a898c3d46517480d51b6abc6c37807bb/pydantic_core-2.6.3-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:046af9cfb5384f3684eeb3f58a48698ddab8dd870b4b3f67f825353a14441418"}, + {url = "https://files.pythonhosted.org/packages/5b/a9/abda51237902e12644c9acfdfc98de61c2f4a28e1517750b0933c993a930/pydantic_core-2.6.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9e8b374ef41ad5c461efb7a140ce4730661aadf85958b5c6a3e9cf4e040ff4bb"}, + {url = "https://files.pythonhosted.org/packages/5f/d3/c66c5dc33dfbb1baa0b4bc4613925d100c6c31132488e59adf77b14168d0/pydantic_core-2.6.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:522a9c4a4d1924facce7270c84b5134c5cabcb01513213662a2e89cf28c1d309"}, + {url = "https://files.pythonhosted.org/packages/5f/f8/b218d36e918be03714d558dc9ffab366faf4f551fcb52f9730b3d5394116/pydantic_core-2.6.3-cp37-cp37m-macosx_10_7_x86_64.whl", hash = "sha256:a53e3195f134bde03620d87a7e2b2f2046e0e5a8195e66d0f244d6d5b2f6d31b"}, + {url = "https://files.pythonhosted.org/packages/62/ee/fb63b80855bf8a51d477da75ec89e747c5e5d5034f5a40a4d6bc449f568a/pydantic_core-2.6.3-cp38-none-win32.whl", hash = "sha256:07a1aec07333bf5adebd8264047d3dc518563d92aca6f2f5b36f505132399efc"}, + {url = "https://files.pythonhosted.org/packages/63/af/869dd176247e855468249bcdb873103146c6b41d52b12a7c6ffc5d30462f/pydantic_core-2.6.3-cp310-none-win_amd64.whl", hash = "sha256:6bf7d610ac8f0065a286002a23bcce241ea8248c71988bda538edcc90e0c39ad"}, + {url = "https://files.pythonhosted.org/packages/66/67/8f294836b8ebd9abc7d94fc759c8b4fbe209a5e73bed83c31257e592398a/pydantic_core-2.6.3-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:252851b38bad3bfda47b104ffd077d4f9604a10cb06fe09d020016a25107bf98"}, + {url = "https://files.pythonhosted.org/packages/67/ff/c6df2c938113bc72db40a671eb83c17911f459910807b9644ec828aa9e78/pydantic_core-2.6.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0b7486d85293f7f0bbc39b34e1d8aa26210b450bbd3d245ec3d732864009819"}, + {url = "https://files.pythonhosted.org/packages/69/35/06c53275843c593026df06f00f84ea31fe7b86218cba77b26f60768aba8f/pydantic_core-2.6.3-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:7dc2ce039c7290b4ef64334ec7e6ca6494de6eecc81e21cb4f73b9b39991408c"}, + {url = "https://files.pythonhosted.org/packages/6c/6e/049b05d470d02f8d11d186a746aededa31ddad82df9a4b7fb7a670cc1cf4/pydantic_core-2.6.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f14546403c2a1d11a130b537dda28f07eb6c1805a43dae4617448074fd49c282"}, + {url = "https://files.pythonhosted.org/packages/71/3b/ed4197ea7a9a6dcc233ca654d3caeb3ea383cc60ac9f7e0a5a92db9ecbc5/pydantic_core-2.6.3-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bf9d42a71a4d7a7c1f14f629e5c30eac451a6fc81827d2beefd57d014c006c4a"}, + {url = "https://files.pythonhosted.org/packages/73/d7/1839f0a48c850e6af5051248abad877f976f31ef16662805632449bd6caa/pydantic_core-2.6.3-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:439a0de139556745ae53f9cc9668c6c2053444af940d3ef3ecad95b079bc9987"}, + {url = "https://files.pythonhosted.org/packages/75/4d/f02a7aa5b63e2c7cdb101f5524a1a0cde5e1210fe7458348964e6649894c/pydantic_core-2.6.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:22134a4453bd59b7d1e895c455fe277af9d9d9fbbcb9dc3f4a97b8693e7e2c9b"}, + {url = "https://files.pythonhosted.org/packages/75/72/72eff1131f1913aeb78eed21b1c2bdee57b4c41ebc94f81ea8c0d48897c6/pydantic_core-2.6.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:02e1c385095efbd997311d85c6021d32369675c09bcbfff3b69d84e59dc103f6"}, + {url = "https://files.pythonhosted.org/packages/7d/c0/38ad95c35bf21e04cee9c332616504b5f2698cb34ec22dcc316c8e7fcec2/pydantic_core-2.6.3-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c6595b0d8c8711e8e1dc389d52648b923b809f68ac1c6f0baa525c6440aa0daa"}, + {url = "https://files.pythonhosted.org/packages/7e/23/8c19bbb4d3bdd823e594c0112181f6e76bdcb0f7b064d57e6372d8b72918/pydantic_core-2.6.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3f90e5e3afb11268628c89f378f7a1ea3f2fe502a28af4192e30a6cdea1e7d5e"}, + {url = "https://files.pythonhosted.org/packages/85/b5/c52495965cc78ad15dcf04b59abf3509d1db052b93876ab6b353c0a18ddb/pydantic_core-2.6.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b44c42edc07a50a081672e25dfe6022554b47f91e793066a7b601ca290f71e42"}, + {url = "https://files.pythonhosted.org/packages/95/4c/10fb8d0335e6966ade1d46657d0a75df714e2e6c692e9438175ae43ef9e6/pydantic_core-2.6.3-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4ef724a059396751aef71e847178d66ad7fc3fc969a1a40c29f5aac1aa5f8784"}, + {url = "https://files.pythonhosted.org/packages/9b/d7/cbd63100d798bf4d302cbea70ee0b55107e84f2dbe0b4729c3d3c1f0d70d/pydantic_core-2.6.3-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:99faba727727b2e59129c59542284efebbddade4f0ae6a29c8b8d3e1f437beb7"}, + {url = "https://files.pythonhosted.org/packages/9b/f7/cae2dacff9e3fd553ca75ae14f8060e7bb18efb522cc9a4aec7937ba410f/pydantic_core-2.6.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:788be9844a6e5c4612b74512a76b2153f1877cd845410d756841f6c3420230eb"}, + {url = "https://files.pythonhosted.org/packages/9c/60/15daecade2df0d85bcbd277195ca017d5214b236f4e7476df2423b723b8a/pydantic_core-2.6.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5cfde4fab34dd1e3a3f7f3db38182ab6c95e4ea91cf322242ee0be5c2f7e3d2f"}, + {url = "https://files.pythonhosted.org/packages/9e/79/40f780f3929efd6ce4be33b8c9efec5beddfcb101aaa9f2dcca76f57a64c/pydantic_core-2.6.3-pp38-pypy38_pp73-macosx_10_7_x86_64.whl", hash = "sha256:3796a6152c545339d3b1652183e786df648ecdf7c4f9347e1d30e6750907f5bb"}, + {url = "https://files.pythonhosted.org/packages/9f/8b/d88f086e7f40e68f8e4ea9465a8f10ffa370dda85d7facb538656c795667/pydantic_core-2.6.3-cp310-cp310-macosx_10_7_x86_64.whl", hash = "sha256:1a0ddaa723c48af27d19f27f1c73bdc615c73686d763388c8683fe34ae777bad"}, + {url = "https://files.pythonhosted.org/packages/a6/58/6ce467c899bddd94718c7d1dc66e8deada77ba4edc2186b719c791dca44e/pydantic_core-2.6.3-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:b962700962f6e7a6bd77e5f37320cabac24b4c0f76afeac05e9f93cf0c620014"}, + {url = "https://files.pythonhosted.org/packages/a7/9d/f78e8927bb73d1f6111de7be5ac1cc1d45a6e4234063a9287d9ef0f6329a/pydantic_core-2.6.3-cp310-none-win32.whl", hash = "sha256:04fe5c0a43dec39aedba0ec9579001061d4653a9b53a1366b113aca4a3c05ca7"}, + {url = "https://files.pythonhosted.org/packages/aa/be/d91d2183f6c3cd1e251e2deb2ab560e38ac1c3d920f33aed77abf2e96791/pydantic_core-2.6.3-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:48c1ed8b02ffea4d5c9c220eda27af02b8149fe58526359b3c07eb391cb353a2"}, + {url = "https://files.pythonhosted.org/packages/ae/9f/eda26f38f76ea7cb47ad1dc0d4597c504cf8dc9376b74195b272d4d00ca5/pydantic_core-2.6.3-cp312-none-win_arm64.whl", hash = "sha256:1ac1750df1b4339b543531ce793b8fd5c16660a95d13aecaab26b44ce11775e9"}, + {url = "https://files.pythonhosted.org/packages/af/d7/149e40873b0d6f37f31cfe72ad874125055a3408a45a99a0f9e53ccb69eb/pydantic_core-2.6.3-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:615a31b1629e12445c0e9fc8339b41aaa6cc60bd53bf802d5fe3d2c0cda2ae8d"}, + {url = "https://files.pythonhosted.org/packages/b0/88/43c79099fe0bcf6680c0782eb1b08069f024a08e114121b6704c9b26355a/pydantic_core-2.6.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9680dd23055dd874173a3a63a44e7f5a13885a4cfd7e84814be71be24fba83db"}, + {url = "https://files.pythonhosted.org/packages/b4/19/9b2685fd637b2aa8a0ed3051782b7d70dbab0cfd824c5649941541f15db5/pydantic_core-2.6.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:f93255b3e4d64785554e544c1c76cd32f4a354fa79e2eeca5d16ac2e7fdd57aa"}, + {url = "https://files.pythonhosted.org/packages/b4/64/6bbd24f487891c9049c9c2529c4f15c218140b87aaa9b063500421da0556/pydantic_core-2.6.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:50555ba3cb58f9861b7a48c493636b996a617db1a72c18da4d7f16d7b1b9952b"}, + {url = "https://files.pythonhosted.org/packages/b8/2b/541a0206fa615b37a9fca2426303c2e1c45bb2f00d8fb7c42d6abef4ca96/pydantic_core-2.6.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d85463560c67fc65cd86153a4975d0b720b6d7725cf7ee0b2d291288433fc21b"}, + {url = "https://files.pythonhosted.org/packages/bc/41/60569994e95b8dc27701f9dcd09f057643a802473b934e698e289735596e/pydantic_core-2.6.3-pp38-pypy38_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:6656a0ae383d8cd7cc94e91de4e526407b3726049ce8d7939049cbfa426518c8"}, + {url = "https://files.pythonhosted.org/packages/c4/dc/bbc346df4afa3aa4c9ec2a6d22c9fd31c326a2d99a491055d735519c2a3f/pydantic_core-2.6.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:df14f6332834444b4a37685810216cc8fe1fe91f447332cd56294c984ecbff1c"}, + {url = "https://files.pythonhosted.org/packages/c7/28/e9c511e09d6d168354411cb75928b5ab0740c0d37d4868aabf2a1777c986/pydantic_core-2.6.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:2a20c533cb80466c1d42a43a4521669ccad7cf2967830ac62c2c2f9cece63e7e"}, + {url = "https://files.pythonhosted.org/packages/c7/74/900985786e5e7c2e66c396f94009f5a17372b6abbb14c2c080e9a538efa6/pydantic_core-2.6.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d63b7545d489422d417a0cae6f9898618669608750fc5e62156957e609e728a5"}, + {url = "https://files.pythonhosted.org/packages/c8/eb/c7432cbca6468f998d5e5d2ecd0b968e8fccd1423eac9a4513182265610c/pydantic_core-2.6.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1480fa4682e8202b560dcdc9eeec1005f62a15742b813c88cdc01d44e85308e5"}, + {url = "https://files.pythonhosted.org/packages/ca/15/2de7d8a1905dd8c11706ede05e722e0a8322cdf5cb2efe169c47891fe087/pydantic_core-2.6.3-cp311-none-win32.whl", hash = "sha256:430ddd965ffd068dd70ef4e4d74f2c489c3a313adc28e829dd7262cc0d2dd1e8"}, + {url = "https://files.pythonhosted.org/packages/ca/6d/e67aa5a1db011d7dac8c7d6810eef703fe38b4d606450f50bcd928a08829/pydantic_core-2.6.3-cp38-none-win_amd64.whl", hash = "sha256:621afe25cc2b3c4ba05fff53525156d5100eb35c6e5a7cf31d66cc9e1963e378"}, + {url = "https://files.pythonhosted.org/packages/cb/37/86bec7ed20592bfcaecf4e27ea7608387bef226e19b92b4469d16be1fadd/pydantic_core-2.6.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:37a822f630712817b6ecc09ccc378192ef5ff12e2c9bae97eb5968a6cdf3b862"}, + {url = "https://files.pythonhosted.org/packages/cb/fe/8c9363389f8f303fb151895af83ac30e06c0406779fe188b4281a64e4c50/pydantic_core-2.6.3.tar.gz", hash = "sha256:1508f37ba9e3ddc0189e6ff4e2228bd2d3c3a4641cbe8c07177162f76ed696c7"}, + {url = "https://files.pythonhosted.org/packages/d4/f7/0f44cd7e48801c0986fb46f13c5972a416c1fbf8b04388a11bf9faf1c136/pydantic_core-2.6.3-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f468d520f47807d1eb5d27648393519655eadc578d5dd862d06873cce04c4d1b"}, + {url = "https://files.pythonhosted.org/packages/d7/9a/367a33d36373e5fea7a5abf0c619d2e1cb08f866d065fe4c2090ec967465/pydantic_core-2.6.3-pp310-pypy310_pp73-macosx_10_7_x86_64.whl", hash = "sha256:d7050899026e708fb185e174c63ebc2c4ee7a0c17b0a96ebc50e1f76a231c057"}, + {url = "https://files.pythonhosted.org/packages/d9/62/d104454f5c1b8f5cb92147ea9a7515159d6867bca367a849639276991f9a/pydantic_core-2.6.3-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b0a5d7edb76c1c57b95df719af703e796fc8e796447a1da939f97bfa8a918d60"}, + {url = "https://files.pythonhosted.org/packages/dd/3c/489be431725a8bb66157b696be45eb87cda80ffb37a0a717a1f09e5d9e41/pydantic_core-2.6.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:aaafc776e5edc72b3cad1ccedb5fd869cc5c9a591f1213aa9eba31a781be9ac1"}, + {url = "https://files.pythonhosted.org/packages/de/e7/96e8a756a204bc4d5275b6b24fba327c68f3dc5de747a4b4963c8114e483/pydantic_core-2.6.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:b594b64e8568cf09ee5c9501ede37066b9fc41d83d58f55b9952e32141256acd"}, + {url = "https://files.pythonhosted.org/packages/e0/31/4c15dbf79c1a3a5156534506d4d2b1d3d22f17a345bcb8dc69a834d2a9c9/pydantic_core-2.6.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:340e96c08de1069f3d022a85c2a8c63529fd88709468373b418f4cf2c949fb0e"}, + {url = "https://files.pythonhosted.org/packages/e0/45/27166728e86a58d03223ed9e557437c5a9fdaa9875f7f4f3907cbc88a283/pydantic_core-2.6.3-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3ccc13afee44b9006a73d2046068d4df96dc5b333bf3509d9a06d1b42db6d8bf"}, + {url = "https://files.pythonhosted.org/packages/e1/be/bee1032fb4ddc7edf9d9c15d765e06f0a7c6f8e3b2c77303beded54a3882/pydantic_core-2.6.3-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:f1a5d8f18877474c80b7711d870db0eeef9442691fcdb00adabfc97e183ee0b0"}, + {url = "https://files.pythonhosted.org/packages/e2/e0/b29dd1cf3963a45c877bf7c22fe64005e0fa51f70721db1d69085b90d8fa/pydantic_core-2.6.3-cp37-none-win_amd64.whl", hash = "sha256:a8acc9dedd304da161eb071cc7ff1326aa5b66aadec9622b2574ad3ffe225525"}, + {url = "https://files.pythonhosted.org/packages/e6/92/31f86fb76e889586adb2fc683e83ede61b96b0738aa25f896b9469745386/pydantic_core-2.6.3-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:75c0ebbebae71ed1e385f7dfd9b74c1cff09fed24a6df43d326dd7f12339ec34"}, + {url = "https://files.pythonhosted.org/packages/e7/db/ee143cd185b04fe1528be9d42bd0e221bc074fff4e8306b27bea50756745/pydantic_core-2.6.3-cp37-cp37m-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:002d0ea50e17ed982c2d65b480bd975fc41086a5a2f9c924ef8fc54419d1dea3"}, + {url = "https://files.pythonhosted.org/packages/e9/ab/8a7d00512e3fe6150d7d7a9138262e042052a5ebed7b295de1fdbf1cea07/pydantic_core-2.6.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5ed7ceca6aba5331ece96c0e328cd52f0dcf942b8895a1ed2642de50800b79d3"}, + {url = "https://files.pythonhosted.org/packages/ec/93/74db7ee54c3393860ba129993cf37b9fa30dd88e5a05f4c0b229189df8c2/pydantic_core-2.6.3-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:e49ce7dc9f925e1fb010fc3d555250139df61fa6e5a0a95ce356329602c11ea9"}, + {url = "https://files.pythonhosted.org/packages/f1/69/74868b3de48990943303bf2f967cac8fc148f76af18104f461d24857b8b0/pydantic_core-2.6.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:acafc4368b289a9f291e204d2c4c75908557d4f36bd3ae937914d4529bf62a76"}, + {url = "https://files.pythonhosted.org/packages/f1/93/02b3ac615ecd8bb5de5afd7b733d057c35675b9b6441a3de73498e40c95d/pydantic_core-2.6.3-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9616567800bdc83ce136e5847d41008a1d602213d024207b0ff6cab6753fe645"}, + {url = "https://files.pythonhosted.org/packages/f3/dd/1f9bf99ea2f2737471e67f24d9ec91a887f75cd1c829a686e771bd3eccaf/pydantic_core-2.6.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9a718d56c4d55efcfc63f680f207c9f19c8376e5a8a67773535e6f7e80e93170"}, + {url = "https://files.pythonhosted.org/packages/f6/1d/b42918302817a49dce460724b8847996c5704c83ca112f1900feeb27c68d/pydantic_core-2.6.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:1c721bfc575d57305dd922e6a40a8fe3f762905851d694245807a351ad255c58"}, + {url = "https://files.pythonhosted.org/packages/f8/46/cc1c9aeffc74a68f4c53737c2e7d7160fbe3f766e704e7a0d625ca695d2f/pydantic_core-2.6.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d79f1f2f7ebdb9b741296b69049ff44aedd95976bfee38eb4848820628a99b50"}, + {url = "https://files.pythonhosted.org/packages/fb/26/7d4a4e9349c3ec619d8f300ea3a637e1a8902e48c7ec7ca4e0bf69606273/pydantic_core-2.6.3-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:56ea80269077003eaa59723bac1d8bacd2cd15ae30456f2890811efc1e3d4413"}, + {url = "https://files.pythonhosted.org/packages/fc/dc/2443b6224c396b765d2c68d61a8c24eeb05a6b425518cad80ce1fc4d4430/pydantic_core-2.6.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a750a83b2728299ca12e003d73d1264ad0440f60f4fc9cee54acc489249b728"}, + {url = "https://files.pythonhosted.org/packages/fe/13/118d3219cb42a2cea5e86f6a1865670c84c54db07cd4813a35433f971b4c/pydantic_core-2.6.3-cp38-cp38-macosx_10_7_x86_64.whl", hash = "sha256:5e9c068f36b9f396399d43bfb6defd4cc99c36215f6ff33ac8b9c14ba15bdf6b"}, + {url = "https://files.pythonhosted.org/packages/ff/7a/730696eaa6f1190a53236fca7eb013aeff25fd951dbae8a108128ddd982c/pydantic_core-2.6.3-cp312-none-win32.whl", hash = "sha256:f70dc00a91311a1aea124e5f64569ea44c011b58433981313202c46bccbec0e1"}, +] +"pyflakes 3.1.0" = [ + {url = "https://files.pythonhosted.org/packages/00/e9/1e1fd7fae559bfd07704991e9a59dd1349b72423c904256c073ce88a9940/pyflakes-3.1.0-py2.py3-none-any.whl", hash = "sha256:4132f6d49cb4dae6819e5379898f2b8cce3c5f23994194c24b77d5da2e36f774"}, + {url = "https://files.pythonhosted.org/packages/8b/fb/7251eaec19a055ec6aafb3d1395db7622348130d1b9b763f78567b2aab32/pyflakes-3.1.0.tar.gz", hash = "sha256:a0aae034c444db0071aa077972ba4768d40c830d9539fd45bf4cd3f8f6992efc"}, +] +"pytest 7.4.1" = [ + {url = "https://files.pythonhosted.org/packages/5b/a2/4db5b065b0694b330f2b3c47e64abda0a470839da5119a404610d6349a11/pytest-7.4.1.tar.gz", hash = "sha256:2f2301e797521b23e4d2585a0a3d7b5e50fdddaaf7e7d6773ea26ddb17c213ab"}, + {url = "https://files.pythonhosted.org/packages/78/af/1a79db43409ea8569a8a91d0a87db4445c7de4cefcf6141e9a5c77dda2d6/pytest-7.4.1-py3-none-any.whl", hash = "sha256:460c9a59b14e27c602eb5ece2e47bec99dc5fc5f6513cf924a7d03a578991b1f"}, +] +"pytest-asyncio 0.21.1" = [ + {url = "https://files.pythonhosted.org/packages/5a/85/d39ef5f69d5597a206f213ce387bcdfa47922423875829f7a98a87d33281/pytest-asyncio-0.21.1.tar.gz", hash = "sha256:40a7eae6dded22c7b604986855ea48400ab15b069ae38116e8c01238e9eeb64d"}, + {url = "https://files.pythonhosted.org/packages/7d/2c/2e5ab8708667972ee31b88bb6fed680ed5ba92dfc2db28e07d0d68d8b3b1/pytest_asyncio-0.21.1-py3-none-any.whl", hash = "sha256:8666c1c8ac02631d7c51ba282e0c69a8a452b211ffedf2599099845da5c5c37b"}, ] "pytest-httpx 0.22.0" = [ {url = "https://files.pythonhosted.org/packages/56/23/a8438a0e11bc159d922a62c868593088b78285628e61f01c78bc1f1251e4/pytest_httpx-0.22.0-py3-none-any.whl", hash = "sha256:cefb7dcf66a4cb0601b0de05e576cca423b6081f3245e7912a4d84c58fa3eae8"}, @@ -590,13 +673,13 @@ content_hash = "sha256:4f924f3751260019f3113dfc4711ba904ffd7acb67603eca610128ba7 {url = "https://files.pythonhosted.org/packages/36/7a/87837f39d0296e723bb9b62bbb257d0355c7f6128853c78955f57342a56d/python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"}, {url = "https://files.pythonhosted.org/packages/4c/c4/13b4776ea2d76c115c1d1b84579f3764ee6d57204f6be27119f13a61d0a9/python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"}, ] -"respx 0.20.1" = [ - {url = "https://files.pythonhosted.org/packages/b0/22/de442b7a15808434fed3e6b65d61709f798b6a4673ad3d71229c82b5f4a1/respx-0.20.1.tar.gz", hash = "sha256:cc47a86d7010806ab65abdcf3b634c56337a737bb5c4d74c19a0dfca83b3bc73"}, - {url = "https://files.pythonhosted.org/packages/bc/6b/52f9a607fd3fa0facefb05f69c6f4b5c6071b92d71b8479217d7b7a95d74/respx-0.20.1-py2.py3-none-any.whl", hash = "sha256:372f06991c03d1f7f480a420a2199d01f1815b6ed5a802f4e4628043a93bd03e"}, +"respx 0.20.2" = [ + {url = "https://files.pythonhosted.org/packages/47/47/8c5a8b02c2144770fe353585b6db21e392c4318b8cff897738159feff562/respx-0.20.2-py2.py3-none-any.whl", hash = "sha256:ab8e1cf6da28a5b2dd883ea617f8130f77f676736e6e9e4a25817ad116a172c9"}, + {url = "https://files.pythonhosted.org/packages/e6/0b/e0df26ea5c7145d95f1ab8ecb20f0778dd8af718e56747977dca9d28362a/respx-0.20.2.tar.gz", hash = "sha256:07cf4108b1c88b82010f67d3c831dae33a375c7b436e54d87737c7f9f99be643"}, ] -"setuptools 67.7.2" = [ - {url = "https://files.pythonhosted.org/packages/2f/8c/f336a966d4097c7cef6fc699b2ecb83b5fb63fd698198c1b5c7905a74f0f/setuptools-67.7.2-py3-none-any.whl", hash = "sha256:23aaf86b85ca52ceb801d32703f12d77517b2556af839621c641fca11287952b"}, - {url = "https://files.pythonhosted.org/packages/fd/53/e5d7ae40d03e4ed20b7cba317cf9c0c97097c8debb39f9d72d182a6578a2/setuptools-67.7.2.tar.gz", hash = "sha256:f104fa03692a2602fa0fec6c6a9e63b6c8a968de13e17c026957dd1f53d80990"}, +"setuptools 68.1.2" = [ + {url = "https://files.pythonhosted.org/packages/19/20/d8dd9d8becaf3e2d6fdc17cc41870d5ada5ceda518996cf5968c2ca71bd8/setuptools-68.1.2.tar.gz", hash = "sha256:3d4dfa6d95f1b101d695a6160a7626e15583af71a5f52176efa5d39a054d475d"}, + {url = "https://files.pythonhosted.org/packages/4f/ab/0bcfebdfc3bfa8554b2b2c97a555569c4c1ebc74ea288741ea8326c51906/setuptools-68.1.2-py3-none-any.whl", hash = "sha256:3d8083eed2d13afc9426f227b24fd1659489ec107c0e86cec2ffdde5c92e790b"}, ] "six 1.16.0" = [ {url = "https://files.pythonhosted.org/packages/71/39/171f1c67cd00715f190ba0b100d606d440a28c93c7714febeca8b79af85e/six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, @@ -610,7 +693,7 @@ content_hash = "sha256:4f924f3751260019f3113dfc4711ba904ffd7acb67603eca610128ba7 {url = "https://files.pythonhosted.org/packages/97/75/10a9ebee3fd790d20926a90a2547f0bf78f371b2f13aa822c759680ca7b9/tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, {url = "https://files.pythonhosted.org/packages/c0/3f/d7af728f075fb08564c5949a9c95e44352e23dee646869fa104a3b2060a3/tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, ] -"typing-extensions 4.5.0" = [ - {url = "https://files.pythonhosted.org/packages/31/25/5abcd82372d3d4a3932e1fa8c3dbf9efac10cc7c0d16e78467460571b404/typing_extensions-4.5.0-py3-none-any.whl", hash = "sha256:fb33085c39dd998ac16d1431ebc293a8b3eedd00fd4a32de0ff79002c19511b4"}, - {url = "https://files.pythonhosted.org/packages/d3/20/06270dac7316220643c32ae61694e451c98f8caf4c8eab3aa80a2bedf0df/typing_extensions-4.5.0.tar.gz", hash = "sha256:5cb5f4a79139d699607b3ef622a1dedafa84e115ab0024e0d9c044a9479ca7cb"}, +"typing-extensions 4.7.1" = [ + {url = "https://files.pythonhosted.org/packages/3c/8b/0111dd7d6c1478bf83baa1cab85c686426c7a6274119aceb2bd9d35395ad/typing_extensions-4.7.1.tar.gz", hash = "sha256:b75ddc264f0ba5615db7ba217daeb99701ad295353c45f9e95963337ceeeffb2"}, + {url = "https://files.pythonhosted.org/packages/ec/6b/63cc3df74987c36fe26157ee12e09e8f9db4de771e0f3404263117e75b95/typing_extensions-4.7.1-py3-none-any.whl", hash = "sha256:440d5dd3af93b060174bf433bccd69b0babc3b15b1a8dca43789fd7f61514b36"}, ] diff --git a/pyproject.toml b/pyproject.toml index b593a70..c21d93c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,7 +1,7 @@ [project] name = "huntflow-api-client" -version = "0.0.18" +version = "0.1.0" description = "Huntflow API Client for Python" authors = [ {name = "Developers huntflow", email = "developer@huntflow.ru"}, @@ -9,7 +9,8 @@ authors = [ dependencies = [ "httpx>=0.23.3", "email-validator>=1.3.1", - "pydantic>=1.10.4", + "pydantic>=2.3.0", + "freezegun>=1.2.2", ] requires-python = ">3.8" readme = "README.md" @@ -32,7 +33,6 @@ test = [ "pytest-httpx>=0.22.0", "respx>=0.20.1", "pytest-asyncio>=0.21.0", - "pytest-freezegun>=0.4.2", ] lint = [ "isort>=5.12.0", diff --git a/tests/test_entities/test_account_divisions.py b/tests/test_entities/test_account_divisions.py index 75a0c3a..aae59a4 100644 --- a/tests/test_entities/test_account_divisions.py +++ b/tests/test_entities/test_account_divisions.py @@ -79,14 +79,14 @@ async def test_list_account_division( divisions = AccountDivision(api_client) response = await divisions.list(ACCOUNT_ID, only_available=only_available) - assert response == DivisionsListResponse.parse_obj(ACCOUNT_DIVISIONS_LIST_RESPONSE) + assert response == DivisionsListResponse.model_validate(ACCOUNT_DIVISIONS_LIST_RESPONSE) httpx_mock.add_response( url=f"{BASE_URL}/accounts/{ACCOUNT_ID}/coworkers/{COWORKER_ID}/divisions", json=ACCOUNT_DIVISIONS_LIST_RESPONSE, ) response = await divisions.list(ACCOUNT_ID, COWORKER_ID) - assert response == DivisionsListResponse.parse_obj(ACCOUNT_DIVISIONS_LIST_RESPONSE) + assert response == DivisionsListResponse.model_validate(ACCOUNT_DIVISIONS_LIST_RESPONSE) with pytest.raises(ValueError): await divisions.list(ACCOUNT_ID, 1, True) @@ -102,6 +102,6 @@ async def test_create_account_division( ) api_client = HuntflowAPI(BASE_URL, token_proxy=token_proxy) divisions = AccountDivision(api_client) - create_divisions_request = BatchDivisionsRequest.parse_obj(BATCH_ACCOUNT_DIVISIONS_REQUEST) + create_divisions_request = BatchDivisionsRequest.model_validate(BATCH_ACCOUNT_DIVISIONS_REQUEST) response = await divisions.create(ACCOUNT_ID, create_divisions_request) - assert response == BatchDivisionsResponse.parse_obj(BATCH_ACCOUNT_DIVISIONS_RESPONSE) + assert response == BatchDivisionsResponse.model_validate(BATCH_ACCOUNT_DIVISIONS_RESPONSE) diff --git a/tests/test_entities/test_account_vacancy_request.py b/tests/test_entities/test_account_vacancy_request.py index fbbbb3e..20126ee 100644 --- a/tests/test_entities/test_account_vacancy_request.py +++ b/tests/test_entities/test_account_vacancy_request.py @@ -106,7 +106,9 @@ async def test_list_schemas( api_client = HuntflowAPI(BASE_URL, token_proxy=token_proxy) vacancy_request = AccountVacancyRequest(api_client) response = await vacancy_request.list(ACCOUNT_ID, only_active=True) - assert response == AccountVacancyRequestsListResponse.parse_obj(VACANCY_REQUEST_SCHEMAS_LIST) + assert response == AccountVacancyRequestsListResponse.model_validate( + VACANCY_REQUEST_SCHEMAS_LIST, + ) async def test_get_schema( @@ -121,4 +123,4 @@ async def test_get_schema( api_client = HuntflowAPI(BASE_URL, token_proxy=token_proxy) vacancy_request = AccountVacancyRequest(api_client) response = await vacancy_request.get(ACCOUNT_ID, schema_id) - assert response == AccountVacancyRequestResponse.parse_obj(VACANCY_REQUEST_SCHEMA) + assert response == AccountVacancyRequestResponse.model_validate(VACANCY_REQUEST_SCHEMA) diff --git a/tests/test_entities/test_applicant_logs.py b/tests/test_entities/test_applicant_logs.py index c57d65c..8124e76 100644 --- a/tests/test_entities/test_applicant_logs.py +++ b/tests/test_entities/test_applicant_logs.py @@ -189,7 +189,7 @@ async def test_applicant_log_list( type_=ApplicantLogType.ADD, personal=True, ) - assert response == ApplicantLogResponse.parse_obj(APPLICANT_LOG_LIST_RESPONSE) + assert response == ApplicantLogResponse.model_validate(APPLICANT_LOG_LIST_RESPONSE) async def test_create_log( @@ -209,4 +209,4 @@ async def test_create_log( applicant_id=APPLICANT_ID, data=data, ) - assert response == CreateApplicantLogResponse.parse_obj(APPLICANT_CREATE_LOG_RESPONSE) + assert response == CreateApplicantLogResponse.model_validate(APPLICANT_CREATE_LOG_RESPONSE) diff --git a/tests/test_entities/test_applicants.py b/tests/test_entities/test_applicants.py index 9a8a38a..3933b5c 100644 --- a/tests/test_entities/test_applicants.py +++ b/tests/test_entities/test_applicants.py @@ -371,7 +371,7 @@ async def test_applicant_search_by_cursor( vacancy=[], account_source=[1], ) - assert response == ApplicantSearchByCursorResponse.parse_obj( + assert response == ApplicantSearchByCursorResponse.model_validate( APPLICANT_SEARCH_BY_CURSOR_RESPONSE, ) next_page_cursor = response.next_page_cursor @@ -382,6 +382,6 @@ async def test_applicant_search_by_cursor( json=APPLICANT_SEARCH_BY_CURSOR_RESPONSE, ) response = await applicants.search_by_cursor(ACCOUNT_ID, next_page_cursor=next_page_cursor) - assert response == ApplicantSearchByCursorResponse.parse_obj( + assert response == ApplicantSearchByCursorResponse.model_validate( APPLICANT_SEARCH_BY_CURSOR_RESPONSE, ) diff --git a/tests/test_entities/test_delayed_tasks.py b/tests/test_entities/test_delayed_tasks.py index f2db7b0..5d2b6fa 100644 --- a/tests/test_entities/test_delayed_tasks.py +++ b/tests/test_entities/test_delayed_tasks.py @@ -39,4 +39,4 @@ async def test_get_delayed_task( api_client = HuntflowAPI(BASE_URL, token_proxy=token_proxy) tasks = DelayedTask(api_client) response = await tasks.get(ACCOUNT_ID, TASK_ID) - assert response == DelayedTaskResponse.parse_obj(DELAYED_TASKS_RESPONSE) + assert response == DelayedTaskResponse.model_validate(DELAYED_TASKS_RESPONSE) diff --git a/tests/test_entities/test_dictionaries.py b/tests/test_entities/test_dictionaries.py index a53a4f7..6407c4b 100644 --- a/tests/test_entities/test_dictionaries.py +++ b/tests/test_entities/test_dictionaries.py @@ -109,7 +109,7 @@ async def test_get_dictionary( dictionaries = Dictionary(api_client) response = await dictionaries.get(ACCOUNT_ID, DICT_CODE) - assert response == DictionaryResponse.parse_obj(DICT_GET_RESPONSE) + assert response == DictionaryResponse.model_validate(DICT_GET_RESPONSE) async def test_list_dictionary( @@ -124,7 +124,7 @@ async def test_list_dictionary( dictionaries = Dictionary(api_client) response = await dictionaries.list(ACCOUNT_ID) - assert response == DictionariesListResponse.parse_obj(DICT_LIST_RESPONSE) + assert response == DictionariesListResponse.model_validate(DICT_LIST_RESPONSE) async def test_create_dictionary( @@ -140,7 +140,7 @@ async def test_create_dictionary( api_request = DictionaryCreateRequest(**DICT_CREATE_REQUEST) response = await dictionaries.create(ACCOUNT_ID, api_request) - assert response == DictionaryTaskResponse.parse_obj(DICT_CREATE_RESPONSE) + assert response == DictionaryTaskResponse.model_validate(DICT_CREATE_RESPONSE) async def test_update_dictionary( @@ -156,4 +156,4 @@ async def test_update_dictionary( api_request = DictionaryUpdateRequest(**DICT_UPDATE_REQUEST) response = await dictionaries.update(ACCOUNT_ID, DICT_CODE, api_request) - assert response == DictionaryTaskResponse.parse_obj(DICT_UPDATE_RESPONSE) + assert response == DictionaryTaskResponse.model_validate(DICT_UPDATE_RESPONSE) diff --git a/tests/test_entities/test_multi_vacancies.py b/tests/test_entities/test_multi_vacancies.py index 6f14654..5b7baaf 100644 --- a/tests/test_entities/test_multi_vacancies.py +++ b/tests/test_entities/test_multi_vacancies.py @@ -10,6 +10,7 @@ MultiVacancyPartialUpdateRequest, MultiVacancyUpdateRequest, VacancyBlock, + VacancyBlockUpdate, VacancyBlockUpdatePartial, ) from huntflow_api_client.models.response.muilti_vacancies import MultiVacancyResponse @@ -54,7 +55,7 @@ async def test_update_multi_vacancy( multi_vacancies = MultiVacancy(api_client) data = MultiVacancyUpdateRequest( position="Test vacancy", - blocks=[VacancyBlock(fill_quotas=[FillQuota()])], + blocks=[VacancyBlockUpdate(fill_quotas=[FillQuota()])], ) response = await multi_vacancies.update(ACCOUNT_ID, VACANCY_ID, data) diff --git a/tests/test_entities/test_production_calendar.py b/tests/test_entities/test_production_calendar.py index 15c221c..37c9add 100644 --- a/tests/test_entities/test_production_calendar.py +++ b/tests/test_entities/test_production_calendar.py @@ -71,7 +71,7 @@ async def test_list_calendar( calendars = ProductionCalendar(api_client) response = await calendars.list() - assert response == CalendarListResponse.parse_obj(CALENDAR_LIST_RESPONSE) + assert response == CalendarListResponse.model_validate(CALENDAR_LIST_RESPONSE) async def test_get_calendar( @@ -86,7 +86,7 @@ async def test_get_calendar( calendars = ProductionCalendar(api_client) response = await calendars.get(calendar_id=1) - assert response == CalendarResponse.parse_obj(CALENDAR_GET_RESPONSE) + assert response == CalendarResponse.model_validate(CALENDAR_GET_RESPONSE) async def test_get_organizations_calendar( @@ -101,7 +101,7 @@ async def test_get_organizations_calendar( calendars = ProductionCalendar(api_client) response = await calendars.get_organizations_calendar(account_id=ACCOUNT_ID) - assert response == AccountCalendarResponse.parse_obj(ORG_CALENDAR_GET_RESPONSE) + assert response == AccountCalendarResponse.model_validate(ORG_CALENDAR_GET_RESPONSE) async def test_get_non_working_days_in_period( @@ -117,7 +117,7 @@ async def test_get_non_working_days_in_period( calendars = ProductionCalendar(api_client) response = await calendars.get_non_working_days_in_period(calendar_id=1, deadline=DEADLINE_DATE) - assert response == NonWorkingDaysResponse.parse_obj(NON_WORKING_DAYS_GET_RESPONSE) + assert response == NonWorkingDaysResponse.model_validate(NON_WORKING_DAYS_GET_RESPONSE) async def test_get_non_working_days_for_multiple_period( @@ -132,13 +132,15 @@ async def test_get_non_working_days_for_multiple_period( calendars = ProductionCalendar(api_client) data = NonWorkingDaysBulkRequest( - __root__=[ + root=[ NonWorkingDays(deadline=datetime.date(2022, 10, 10), start=datetime.date(2021, 10, 10)), NonWorkingDays(deadline=datetime.date(2023, 10, 10), start=datetime.date(2022, 10, 10)), ], ) response = await calendars.get_non_working_days_for_multiple_period(calendar_id=1, data=data) - assert response == NonWorkingDaysBulkResponse.parse_obj(MULTIPLE_NON_WORKING_DAYS_GET_RESPONSE) + assert response == NonWorkingDaysBulkResponse.model_validate( + MULTIPLE_NON_WORKING_DAYS_GET_RESPONSE, + ) async def test_get_deadline_date_with_non_working_days( @@ -173,7 +175,7 @@ async def test_get_multiple_deadline_dates_with_non_working_days( calendars = ProductionCalendar(api_client) data = DeadLineDatesBulkRequest( - __root__=[ + root=[ DeadLineDate(days=100, start=datetime.date(2021, 10, 10)), DeadLineDate(days=5, start=datetime.date(2022, 10, 10)), ], @@ -183,7 +185,7 @@ async def test_get_multiple_deadline_dates_with_non_working_days( calendar_id=1, data=data, ) - assert response == DatesBulkResponse.parse_obj(MULTIPLE_DEADLINE_RESPONSE) + assert response == DatesBulkResponse.model_validate(MULTIPLE_DEADLINE_RESPONSE) async def test_get_start_date_with_non_working_days( @@ -218,7 +220,7 @@ async def test_get_multiple_start_dates_with_non_working_days( calendars = ProductionCalendar(api_client) data = StartDatesBulkRequest( - __root__=[ + root=[ StartDate(days=100, deadline=datetime.date(2021, 10, 10)), StartDate(days=200, deadline=datetime.date(2019, 7, 17)), ], @@ -228,4 +230,4 @@ async def test_get_multiple_start_dates_with_non_working_days( calendar_id=1, data=data, ) - assert response == DatesBulkResponse.parse_obj(MULTIPLE_START_RESPONSE) + assert response == DatesBulkResponse.model_validate(MULTIPLE_START_RESPONSE) diff --git a/tests/test_entities/test_questionary.py b/tests/test_entities/test_questionary.py index cecb6d2..481d1f1 100644 --- a/tests/test_entities/test_questionary.py +++ b/tests/test_entities/test_questionary.py @@ -58,7 +58,7 @@ async def test_get_schema( questionary = ApplicantsQuestionary(api_client) response = await questionary.get_schema(ACCOUNT_ID) - assert response == QuestionarySchemaResponse.parse_obj(QUESTIONARY_SCHEMA_RESPONSE) + assert response == QuestionarySchemaResponse.model_validate(QUESTIONARY_SCHEMA_RESPONSE) async def test_create_questionary( diff --git a/tests/test_entities/test_vacancies.py b/tests/test_entities/test_vacancies.py index 1799e05..872022e 100644 --- a/tests/test_entities/test_vacancies.py +++ b/tests/test_entities/test_vacancies.py @@ -482,7 +482,7 @@ async def test_get_vacancy_quota_list( vacancies = Vacancy(api_client) response = await vacancies.get_quotas(ACCOUNT_ID, VACANCY_ID, FRAME_ID) - assert response == VacancyQuotasResponse.parse_obj(VACANCY_QUOTAS_RESPONSE) + assert response == VacancyQuotasResponse.model_validate(VACANCY_QUOTAS_RESPONSE) async def test_get_vacancy_status_groups( diff --git a/tests/test_entities/test_vacancy_request.py b/tests/test_entities/test_vacancy_request.py index b5dfcbe..211b16c 100644 --- a/tests/test_entities/test_vacancy_request.py +++ b/tests/test_entities/test_vacancy_request.py @@ -89,7 +89,9 @@ async def test_list_vacancy_request( vacancy_request = VacancyRequest(api_client) response = await vacancy_request.list(ACCOUNT_ID) - assert response == VacancyRequestListResponse.parse_obj(VACANCY_REQUEST_LIST_WITHOUT_VALUES) + assert response == VacancyRequestListResponse.model_validate( + VACANCY_REQUEST_LIST_WITHOUT_VALUES, + ) httpx_mock.add_response( url=( @@ -100,7 +102,7 @@ async def test_list_vacancy_request( ) response = await vacancy_request.list(ACCOUNT_ID, vacancy_id=1, values=True) - assert response == VacancyRequestListResponse.parse_obj(VACANCY_REQUEST_LIST_WITH_VALUES) + assert response == VacancyRequestListResponse.model_validate(VACANCY_REQUEST_LIST_WITH_VALUES) async def test_get_vacancy_request( @@ -115,7 +117,7 @@ async def test_get_vacancy_request( vacancy_request = VacancyRequest(api_client) response = await vacancy_request.get(ACCOUNT_ID, 1) - assert response == VacancyRequestResponse.parse_obj(VACANCY_REQUEST_RESPONSE) + assert response == VacancyRequestResponse.model_validate(VACANCY_REQUEST_RESPONSE) assert response.values @@ -129,6 +131,6 @@ async def test_create_vacancy_request( ) api_client = HuntflowAPI(BASE_URL, token_proxy=token_proxy) vacancy_request = VacancyRequest(api_client) - data = CreateVacancyRequestRequest.parse_obj(VACANCY_REQUEST_CREATE_REQUEST) + data = CreateVacancyRequestRequest.model_validate(VACANCY_REQUEST_CREATE_REQUEST) response = await vacancy_request.create(ACCOUNT_ID, data) - assert response == VacancyRequestResponse.parse_obj(VACANCY_REQUEST_RESPONSE) + assert response == VacancyRequestResponse.model_validate(VACANCY_REQUEST_RESPONSE) diff --git a/tests/test_tokens/test_huntflow_token_proxy.py b/tests/test_tokens/test_huntflow_token_proxy.py index c482417..e7f12ab 100644 --- a/tests/test_tokens/test_huntflow_token_proxy.py +++ b/tests/test_tokens/test_huntflow_token_proxy.py @@ -1,7 +1,7 @@ import json -import time from datetime import datetime, timedelta -from typing import Any + +from freezegun import freeze_time from huntflow_api_client.tokens.locker import AsyncioLockLocker from huntflow_api_client.tokens.proxy import HuntflowTokenProxy @@ -30,28 +30,25 @@ async def test_get_refresh_token_data__ok( async def test_update_token__ok( token_storage: HuntflowTokenFileStorage, token_filename: str, - freezer: Any, ) -> None: token_proxy = HuntflowTokenProxy(token_storage, AsyncioLockLocker()) await token_proxy.get_auth_header() tomorrow = datetime.now() + timedelta(days=1) - freezer.move_to(tomorrow.isoformat()) - now = time.time() - - new_token_pair = TokenPair() - refresh_token_data = get_token_refresh_data(new_token_pair) - - await token_proxy.update(refresh_token_data) - assert await token_proxy.is_updated() - - updated_api_token = {} - with open(token_filename) as token_data_file: - updated_api_token = json.load(token_data_file) - - assert updated_api_token == { - "access_token": refresh_token_data["access_token"], - "refresh_token": refresh_token_data["refresh_token"], - "expiration_timestamp": now + refresh_token_data["expires_in"], - "last_refresh_timestamp": now, - } + with freeze_time(tomorrow): + tomorrow_ts = datetime.now().timestamp() + new_token_pair = TokenPair() + refresh_token_data = get_token_refresh_data(new_token_pair) + + await token_proxy.update(refresh_token_data) + assert await token_proxy.is_updated() + + with open(token_filename) as token_data_file: + updated_api_token = json.load(token_data_file) + + assert updated_api_token == { + "access_token": refresh_token_data["access_token"], + "refresh_token": refresh_token_data["refresh_token"], + "expiration_timestamp": tomorrow_ts + refresh_token_data["expires_in"], + "last_refresh_timestamp": tomorrow_ts, + }