Table of Contents
- Migration
 - From 0.9.0-0.9.7
 - From 0.8.2-0.9.0
 - From 0.7.1-… to 0.8.0
 - From 0.7.0 to 0.7.1
 - From 0.6.0 to 0.7.0
 - From 0.5.0 to 0.6.0
 - From 0.4.0 to 0.5.0
 - From 0.3.x to 0.4.0
 
Migration
This page contains details on how to migrate between different versions of pyatv. Beware that these guides are written according to “best effort” and might be incomplete or missing some details. If you find something to be unclear, please help out by writing an issue or creating a pull request
From 0.9.0-0.9.7
General Changes
- Each service now has interface.BaseService.enabled, indicating if pyatv should connect to the service or not. Generally this is of little importance, but it must be verified before initiaing pairing. Pairing should never be initiated for disabled services.
 
Deprecations
None
From 0.8.2-0.9.0
General Changes
- To restore support with tvOS 15, make sure to provide AirPlay credentials. Credentials obtained with earlier versions of pyatv are incompatible (pair again).
 - The 
passwordproperty previously present inconf.RaopServiceis now part ofinterface.BaseServiceinstead. - Make sure to verify interface.BaseService.pairing before calling pyatv.pair (in case new credentials are needed).
 - Check interface.BaseService.requires_password if a password needs to be provided
 - At least version 3.17.3 of protobuf is now required.
 - mediafile replaced audio-metadata as a dependency
 
Deprecations
- Service specific configurations, e.g. conf.MrpService, have been replaced by conf.ManualService. Scheduled for removal in 1.0.0.
 - interface.RemoteControl.volume_up and interface.RemoteControl.volume_down are now replaced by interface.Audio.volume_up and interface.Audio.volume_up. Scheduled for removal in 1.0.0.
 
From 0.7.1-… to 0.8.0
General Changes
- The push updater interface is now considered a feature and availability (via interface.Features.get_feature and const.FeatureName.PushUpdates) should now be performed before using it.
 - audio-metadata, bitarray and miniaudio are new dependencies in this release (used by RAOP).
 - At least version 3.14 of protobuf is now required.
 
Deprecations
- Passing 
protocolto pyatv.connect is no longer needed and its value will be ignored. Scheduled for removal in version 1.0.0. 
From 0.7.0 to 0.7.1
General Changes
- Unicast scanning (i.e. passing 
hoststo pyatv.scan) will not verify if hosts are on the same network anymore (NonLocalSubnetErrorwill not be thrown). Requests will just time out. See [#775] for more details. 
Deprecations
NonLocalSubnetErroris never thrown and shall not be checked for. It will be removed in 0.9.0.
From 0.6.0 to 0.7.0
General Changes
- No library changes
 - MRP arguments to atvproxy has been simplified (only credentials and IP to Apple TV must now be provided)
 
Deprecations
- None
 
From 0.5.0 to 0.6.0
General Changes
- interface.AppleTV.close has been changed to a regular function instead of a coroutine.
 - All listeners are now stored as weak references
 
From 0.4.0 to 0.5.0
General Changes
- None
 
Deprecations
- Python 3.6 or later is now required
 suspendandwakeupin interface.RemoteControl have been deprecated. Use interface.Power.turn_on and interface.Power.turn_off instead.- helpers.auto_connect is now a coroutine. The example has been updated.
 
From 0.3.x to 0.4.0
General Changes
- Device configuration has moved from 
AppleTVDeviceto conf.AppleTV pyatv.connect_to_apple_tvhas been renamed to pyatv.connectpyatv.scan_for_apple_tvshas been renamed to pyatv.scan- Pairing has been made generic and is done via pyatv.pair
 - Constants, e.g. media type, has been changed into enums
 play_statehas been renamed todevice_state- AirPlay interface has been renamed from 
AppleTV.airplayto interface.AppleTV.stream 
Deprecations
- Arguments 
abort_on_foundandonly_home_sharinghave been removed from pyatv.scan - The 
Metadata.artwork_urlmethod has been deprecated and has no replacement - All methods in the AirPlay interface has been deprecated in favor
of the generic pairing interface (except for 
play_url) pyatv.pair_with_apple_tvhas been replaced by pyatv.pair which can pair all protocols