All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- Добавлена базовая CLI-оболочка:
avito --help,avito --version,avito version,avito helpи единый вход черезpython -m avito. - Задокументирован первый CLI-контракт: глобальные флаги, режимы вывода, разделение stdout/stderr, безопасный JSON/human-рендеринг ошибок и стабильные exit codes.
- Добавлены локальные CLI-команды учетных записей:
avito account add,avito account list,avito account use,avito account current,avito account deleteи aliasavito account remove. - CLI хранит учетные записи в локальных JSON-файлах с правами доступа к файлам и маскирует секреты во всех режимах вывода; первая версия использует plaintext storage без OS keychain.
- Для безопасного ввода
client_secretдобавлены скрытый интерактивный prompt и--client-secret-stdin;--client-secretи совместимый--api-keyоставлены для явной автоматизации с учетом риска попадания значения в историю shell. - Добавлена registry-backed справка
avito help <resource>иavito help <resource> <action>для локальных команд, helper workflows, aliases и API command candidates без созданияAvitoClient. - Добавлена основа сериализации результатов CLI: SDK-модели выводятся через
публичный
model_dump()/to_dict(), секреты маскируются после сериализации, аPaginatedListпо умолчанию выгружает только ограниченный набор страниц. - Подключен первый registry-backed API slice CLI:
avito account get-selfиavito account get-balance --user-id ...вызывают публичныйAvitoClient, проходят через общий слой приведения аргументов, сериализации и безопасного JSON/human-вывода. - Расширено read-only CLI-покрытие API: все поддержанные sync Swagger-bound
GET/HEAD-команды регистрируются через CLI registry, проходят fake-transport
smoke coverage и проверяются фазой
scripts/lint_cli_coverage.py --phase read; read-bindings без достаточных factory/method аргументов оформлены как временные исключения до Stage 10C. - Добавлены CLI safety primitives для будущих write/destructive API-команд:
registry хранит проверенную safety policy, destructive/expensive команды
требуют prompt,
--yesили точный--confirm, а--dry-runпубликуется только для SDK-методов с публичнымdry_run. - Расширено write CLI-покрытие API: generic-safe sync Swagger-bound write-команды
регистрируются через CLI registry, проходят fake-transport smoke coverage и
проверяются фазой
scripts/lint_cli_coverage.py --phase write; write-bindings, которым нужен CLI adapter или уточнение binding metadata, оформлены как временные исключения до Stage 10C. - Добавлены публичные CLI helper workflows:
account-health show,listing-health show,chat-summary show,order-summary show,review-summary show,promotion-summary showиcapabilities show; команды вызывают только публичные методыAvitoClient, поддерживают JSON/human вывод и не входят в Swagger one-to-one coverage. - Добавлены локальные CLI-команды конфигурации и диагностики:
avito config get,avito config set,avito config unset,avito config list --show-source,avito status,avito doctorиavito completion bash|zsh|fish; команды работают без сетевых вызовов и не раскрывают секреты. - Добавлена публичная CLI-документация: quickstart в README, how-to для профилей и ежедневных workflows, стабильный reference контракт, объяснение архитектуры registry/coverage и ссылки из разделов security, auth/config и API coverage.
- Фундамент Async API:
AsyncTransport,AsyncAuthProvider,AsyncOperationExecutor,AsyncPaginatedList,AsyncAvitoClientбез доменных factory-методов;RateLimitStateвынесен в shared. - Async-поддержка домена tariffs:
AsyncTariff(PoC шаблона). - Async-поддержка домена accounts: AsyncAccount, AsyncAccountHierarchy.
- Async-поддержка домена ads: AsyncAd, AsyncAdStats, AsyncAdPromotion, AsyncAutoloadProfile, AsyncAutoloadReport, AsyncAutoloadArchive.
- Async-поддержка домена autoteka: AsyncAutotekaVehicle, AsyncAutotekaReport, AsyncAutotekaMonitoring, AsyncAutotekaScoring, AsyncAutotekaValuation.
- Async-поддержка домена cpa: AsyncCallTrackingCall, AsyncCpaArchive, AsyncCpaCall, AsyncCpaChat, AsyncCpaLead.
- Async-поддержка домена jobs: AsyncApplication, AsyncJobDictionary, AsyncJobWebhook, AsyncResume, AsyncVacancy.
- Async-поддержка домена messenger: AsyncChat, AsyncChatMedia, AsyncChatMessage, AsyncChatWebhook, AsyncSpecialOfferCampaign.
- Async-поддержка домена orders: AsyncOrder, AsyncOrderLabel, AsyncDeliveryOrder, AsyncSandboxDelivery, AsyncDeliveryTask, AsyncStock.
- Async-поддержка домена promotion: AsyncPromotionOrder, AsyncBbipPromotion, AsyncTrxPromotion, AsyncCpaAuction, AsyncTargetActionPricing, AsyncAutostrategyCampaign.
- Async-поддержка домена ratings: AsyncRatingProfile, AsyncReview, AsyncReviewAnswer.
- Async-поддержка домена realty: AsyncRealtyAnalyticsReport, AsyncRealtyBooking, AsyncRealtyListing, AsyncRealtyPricing.
- Async convenience methods для
AsyncAvitoClient:business_summary,account_health,listing_health,chat_summary,order_summary,review_summary,promotion_summary,capabilities. - Добавлен
ClientClosedErrorдля вызовов послеAvitoClient.close().
- Env alias
AVITO_SECRETдляAVITO_CLIENT_SECRETустарел и теперь эмитируетDeprecationWarning; используйтеAVITO_CLIENT_SECRET. - Архивные CPA-методы
CpaArchive.get_call,CpaArchive.get_balance_info,CpaArchive.get_call_by_idи режимCpaChat.list(version=1)теперь эмитируютDeprecationWarningпри первом вызове; используйтеcall_tracking_call().download,cpa_lead().get_balance_info,call_tracking_call().getиcpa_chat().list(version=2). - Архивные методы автозагрузки
AutoloadArchive.get_profile,AutoloadArchive.save_profile,AutoloadArchive.get_last_completed_report,AutoloadArchive.get_reportтеперь эмитируютDeprecationWarningпри первом вызове; используйтеautoload_profile().get,autoload_profile().save,autoload_report().get_last_completedиautoload_report().get.
- Централизовано выполнение схемы
request + mapчерезTransport.request_public_model. - Убраны прямые обращения доменных клиентов к
request_jsonи приватномуTransport._auth_provider. - Секционные клиенты переведены на
@dataclass(slots=True, frozen=True). - Иерархия исключений упрощена до frozen dataclass без кастомного
__setattr__. AvitoClient.settings,AvitoClient.auth_providerиAvitoClient.transportстали read-only свойствами; для тестов используйтеAvitoClient._from_transport(...).- OAuth token flow переведен на общий
Transportбез прямогоhttpx.Client().post(...); ошибки OAuth продолжают приходить какAuthenticationError. - Публичные сигнатуры
accounts,ads,autoteka,cpa,jobs,messenger,orders,promotion,ratingsиrealtyпереведены сrequest-DTO на keyword-only примитивы и коллекции. - Swagger-bound public methods теперь принимают per-operation overrides
timeoutиretry;retry="enabled"форсирует retry,retry="disabled"запрещает retry для конкретного вызова. Review.list,AutotekaMonitoring.get_monitoring_reg_actions,Vacancy.list,Vacancy.get,Application.get_idsиResume.listбольше не принимают internal query DTO в публичных сигнатурах; передавайтеpage,offset,limit,query,vacancy_idиupdated_at_fromнапрямую.- Promotion input модели
BbipItem,TrxItemиCpaAuctionBidInput, а также jobs-модельApplicationViewedItemоформлены как публичные frozen dataclass-модели без наследования от internalRequestModel. - Transport получил поддержку
Idempotency-Key; публичные write-методы во всех доменах принимаютidempotency_key, а dry-run/write-контракт promotion покрыт тестами. - Во всех доменных пакетах добавлены
enums.py;accounts,ads,autoteka,jobs,messenger,orders,promotion,ratings,realtyиtariffsпереведены на typed enums с fallback наUNKNOWNи warning-логом ровно один раз на неизвестное upstream-значение. CpaCallStatusIdполучилUNKNOWN; неизвестный upstreamstatusIdбольше не превращается вNoneи логирует warning один раз на процесс.- BREAKING:
AccountHierarchy.list_items_by_employee(...)теперь требуетcategory_idи отправляет Swagger bodyemployeeId/categoryId/lastItemId; старыеlimit/offsetне входят в контракт/listItemsByEmployeeIdV1. - BREAKING: статистические методы
AdStats.get_item_stats(...),get_calls_stats(...),get_item_analytics(...)иget_account_spendings(...)теперь требуют обязательные поля периода и параметры, описанные в Swagger requestBody. - BREAKING:
AdPromotion.apply_vas(...)принимаетvas_idдля legacy v1 endpoint, аapply_vas_direct(...)принимаетslugs; payload больше не использует внутренний ключcodes. - BREAKING: CPA methods now match Swagger request bodies: complaints send
message, balanceInfo sends JSON string"{}", chats/phones/calls list methods requirelimit/offsetorlimitfields declared by Swagger. - BREAKING: Autoteka request bodies now match Swagger:
get_leads(...)requiressubscription_id, catalog resolve sendsfieldsValueIds, monitoring bucket methods senddata, and vehicle/request identifiers use Swagger JSON types. - BREAKING: Autoload profile saves now require Swagger fields (
report_email, schedule and feed/upload URL), stock info sendsitem_ids, TrxPromo cancel sendsitemIDs, and Autostrategy update/stop generated calls includecampaignIdandversion. - BREAKING: Jobs vacancy write methods now require Swagger billing fields, classic v1 vacancy create requires the documented required fields,
JobWebhook.update(...)requiressecret, and vacancy statuses send UUID string ids. - BREAKING: Messenger request bodies now match Swagger for blacklist, text messages and image messages; malformed Swagger required fields absent from schema properties are ignored by the normalized schema tree.
- BREAKING: Special-offers request bodies now match Swagger:
create_multi(...)sends onlyitemIds,confirm_multi(...)sendsdispatches/expiresAt, andget_stats(...)requiresdate_time_from/date_time_to. - Вызовы после
AvitoClient.close()теперь поднимаютClientClosedErrorвместоConfigurationError.
- BREAKING: удалены классы исключений
NotFoundError,ClientError,ServerErrorизavito.core.exceptions. HTTP 404 и 5xx теперь маппятся наUpstreamApiError. Пользователям, ловившим эти типы, перейти наUpstreamApiErrorилиAvitoErrorи проверятьstatus_code. - BREAKING: удален публичный wrapper
Application.list(...); используйтеapplication().get_ids(updated_at_from=...)для синхронизации id иapplication().get_by_ids(ids=...)для получения данных откликов. - BREAKING: internal query DTO
ApplicationIdsQuery,ResumeSearchQuery,VacanciesQueryиMonitoringEventsQueryбольше не re-export-ятся из доменных пакетов; публичные методы принимают primitive keyword-only параметры. - BREAKING: удалены старые public input aliases
BbipItemInput,TrxItemInputиBidItemInput; используйтеBbipItem,TrxItemиCpaAuctionBidInput. - Удалены legacy-модули
avito/auth/mappers.pyиavito/auth/enums.py(внутренние, без публичных импортов). - Удалены инфраструктурные мета-тесты (
tests/docs/,tests/test_inventory_architecture.py,tests/test_download_avito_api_specs.py,tests/core/test_architecture_lint.py,tests/core/test_swagger_{linter,discovery,factory_map,report}.py); архитектурные инварианты остаются подmake swagger-lintиmake architecture-lint. - Удалены архитектурные тесты
tests/contracts/test_public_surface.pyиtests/core/test_swagger.py— публичная поверхность и метаданные@swagger_operationверифицируютсяmypy strict+make swagger-lint+tests/contracts/test_swagger_contracts.py.
- Нет изменений.
- Первый публичный релиз changelog для
avito-py.
- Зафиксирована базовая структура истории изменений для следующих фаз исправления STYLEGUIDE.