pyobjc-framework-Photos 12.2.2__tar.gz → 13.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. {pyobjc_framework_photos-12.2.2 → pyobjc_framework_photos-13.0}/Lib/Photos/__init__.py +2 -2
  2. {pyobjc_framework_photos-12.2.2 → pyobjc_framework_photos-13.0}/Lib/Photos/_metadata.py +84 -5
  3. {pyobjc_framework_photos-12.2.2 → pyobjc_framework_photos-13.0}/Lib/pyobjc_framework_Photos.egg-info/PKG-INFO +5 -5
  4. {pyobjc_framework_photos-12.2.2 → pyobjc_framework_photos-13.0}/Lib/pyobjc_framework_Photos.egg-info/SOURCES.txt +3 -2
  5. pyobjc_framework_photos-13.0/Lib/pyobjc_framework_Photos.egg-info/pyobjc-build-info.txt +3 -0
  6. pyobjc_framework_photos-13.0/Lib/pyobjc_framework_Photos.egg-info/requires.txt +2 -0
  7. {pyobjc_framework_photos-12.2.2 → pyobjc_framework_photos-13.0}/Modules/_Photos.m +9 -2
  8. {pyobjc_framework_photos-12.2.2 → pyobjc_framework_photos-13.0}/Modules/_Photos_protocols.m +8 -5
  9. {pyobjc_framework_photos-12.2.2 → pyobjc_framework_photos-13.0}/Modules/pyobjc-api.h +18 -4
  10. {pyobjc_framework_photos-12.2.2 → pyobjc_framework_photos-13.0}/Modules/pyobjc-compat.h +0 -18
  11. {pyobjc_framework_photos-12.2.2 → pyobjc_framework_photos-13.0}/PKG-INFO +5 -5
  12. {pyobjc_framework_photos-12.2.2 → pyobjc_framework_photos-13.0}/PyObjCTest/test_phadjustmentdata.py +1 -1
  13. {pyobjc_framework_photos-12.2.2 → pyobjc_framework_photos-13.0}/PyObjCTest/test_phasset.py +4 -4
  14. {pyobjc_framework_photos-12.2.2 → pyobjc_framework_photos-13.0}/PyObjCTest/test_phassetchangerequest.py +14 -1
  15. {pyobjc_framework_photos-12.2.2 → pyobjc_framework_photos-13.0}/PyObjCTest/test_phassetresourcecreationoptions.py +1 -1
  16. {pyobjc_framework_photos-12.2.2 → pyobjc_framework_photos-13.0}/PyObjCTest/test_phassetresourcemanager.py +1 -1
  17. pyobjc_framework_photos-13.0/PyObjCTest/test_phassetresourceuploadjoboptions.py +13 -0
  18. {pyobjc_framework_photos-12.2.2 → pyobjc_framework_photos-13.0}/PyObjCTest/test_phchange.py +1 -1
  19. {pyobjc_framework_photos-12.2.2 → pyobjc_framework_photos-13.0}/PyObjCTest/test_phcloudidentifier.py +1 -1
  20. {pyobjc_framework_photos-12.2.2 → pyobjc_framework_photos-13.0}/PyObjCTest/test_phcollection.py +1 -1
  21. {pyobjc_framework_photos-12.2.2 → pyobjc_framework_photos-13.0}/PyObjCTest/test_phcontenteditinginput.py +1 -1
  22. {pyobjc_framework_photos-12.2.2 → pyobjc_framework_photos-13.0}/PyObjCTest/test_phcontenteditingoutput.py +1 -1
  23. {pyobjc_framework_photos-12.2.2 → pyobjc_framework_photos-13.0}/PyObjCTest/test_phfetchoptions.py +7 -2
  24. {pyobjc_framework_photos-12.2.2 → pyobjc_framework_photos-13.0}/PyObjCTest/test_phfetchresult.py +1 -1
  25. {pyobjc_framework_photos-12.2.2 → pyobjc_framework_photos-13.0}/PyObjCTest/test_phimagemanager.py +21 -18
  26. {pyobjc_framework_photos-12.2.2 → pyobjc_framework_photos-13.0}/PyObjCTest/test_phlivephotoeditingcontext.py +21 -21
  27. {pyobjc_framework_photos-12.2.2 → pyobjc_framework_photos-13.0}/PyObjCTest/test_photostypes.py +111 -74
  28. {pyobjc_framework_photos-12.2.2 → pyobjc_framework_photos-13.0}/PyObjCTest/test_phphotolibrary.py +41 -11
  29. {pyobjc_framework_photos-12.2.2 → pyobjc_framework_photos-13.0}/metadata/Photos.fwinfo +2 -130
  30. pyobjc_framework_photos-12.2.2/metadata/raw/arm64-26.5.fwinfo → pyobjc_framework_photos-13.0/metadata/raw/arm64-27.fwinfo +1190 -4
  31. pyobjc_framework_photos-12.2.2/metadata/raw/x86_64-26.5.fwinfo → pyobjc_framework_photos-13.0/metadata/raw/x86_64-27.fwinfo +1190 -4
  32. {pyobjc_framework_photos-12.2.2 → pyobjc_framework_photos-13.0}/pyobjc_setup.py +7 -7
  33. {pyobjc_framework_photos-12.2.2 → pyobjc_framework_photos-13.0}/setup.py +1 -1
  34. pyobjc_framework_photos-12.2.2/Lib/pyobjc_framework_Photos.egg-info/pyobjc-build-info.txt +0 -3
  35. pyobjc_framework_photos-12.2.2/Lib/pyobjc_framework_Photos.egg-info/requires.txt +0 -2
  36. {pyobjc_framework_photos-12.2.2 → pyobjc_framework_photos-13.0}/Lib/pyobjc_framework_Photos.egg-info/dependency_links.txt +0 -0
  37. {pyobjc_framework_photos-12.2.2 → pyobjc_framework_photos-13.0}/Lib/pyobjc_framework_Photos.egg-info/not-zip-safe +0 -0
  38. {pyobjc_framework_photos-12.2.2 → pyobjc_framework_photos-13.0}/Lib/pyobjc_framework_Photos.egg-info/top_level.txt +0 -0
  39. {pyobjc_framework_photos-12.2.2 → pyobjc_framework_photos-13.0}/License.txt +0 -0
  40. {pyobjc_framework_photos-12.2.2 → pyobjc_framework_photos-13.0}/MANIFEST.in +0 -0
  41. {pyobjc_framework_photos-12.2.2 → pyobjc_framework_photos-13.0}/PyObjCTest/__init__.py +0 -0
  42. {pyobjc_framework_photos-12.2.2 → pyobjc_framework_photos-13.0}/PyObjCTest/test_pherror.py +0 -0
  43. {pyobjc_framework_photos-12.2.2 → pyobjc_framework_photos-13.0}/PyObjCTest/test_phlivephoto.py +0 -0
  44. {pyobjc_framework_photos-12.2.2 → pyobjc_framework_photos-13.0}/PyObjCTest/test_photos.py +0 -0
  45. {pyobjc_framework_photos-12.2.2 → pyobjc_framework_photos-13.0}/PyObjCTest/test_phpersistentchange.py +0 -0
  46. {pyobjc_framework_photos-12.2.2 → pyobjc_framework_photos-13.0}/PyObjCTest/test_phpersistentchangefetchresult.py +0 -0
  47. {pyobjc_framework_photos-12.2.2 → pyobjc_framework_photos-13.0}/PyObjCTest/test_phproject.py +0 -0
  48. {pyobjc_framework_photos-12.2.2 → pyobjc_framework_photos-13.0}/metadata/metadata.ini +0 -0
  49. {pyobjc_framework_photos-12.2.2 → pyobjc_framework_photos-13.0}/pyproject.toml +0 -0
  50. {pyobjc_framework_photos-12.2.2 → pyobjc_framework_photos-13.0}/setup.cfg +0 -0
@@ -13,10 +13,10 @@ def _setup():
13
13
  import objc
14
14
  from . import _metadata, _Photos
15
15
 
16
- if objc.macos_available(10, 15):
16
+ if objc.macos_available(10, 15): # pragma: no branch
17
17
  identifier = "com.apple.Photos"
18
18
  else:
19
- identifier = "com.apple.PhotoKit.Photos"
19
+ identifier = "com.apple.PhotoKit.Photos" # pragma: no cover
20
20
 
21
21
  dir_func, getattr_func = objc.createFrameworkDirAndGetattr(
22
22
  name="Photos",
@@ -1,7 +1,5 @@
1
1
  # This file is generated by objective.metadata
2
2
  #
3
- # Last update: Thu May 28 22:50:12 2026
4
- #
5
3
  # flake8: noqa
6
4
 
7
5
  import objc, sys
@@ -31,7 +29,7 @@ else:
31
29
 
32
30
  misc = {}
33
31
  constants = """$PHContentEditingInputCancelledKey$PHContentEditingInputErrorKey$PHContentEditingInputResultIsInCloudKey$PHImageCancelledKey$PHImageErrorKey$PHImageManagerMaximumSize@{CGSize=dd}$PHImageResultIsDegradedKey$PHImageResultIsInCloudKey$PHImageResultRequestIDKey$PHLivePhotoEditingErrorDomain$PHLivePhotoInfoCancelledKey$PHLivePhotoInfoErrorKey$PHLivePhotoInfoIsDegradedKey$PHLivePhotoShouldRenderAtPlaybackTime$PHLocalIdentifierNotFound$PHLocalIdentifiersErrorKey$PHPhotosErrorDomain$"""
34
- enums = """$PHAccessLevelAddOnly@1$PHAccessLevelReadWrite@2$PHAssetBurstSelectionTypeAutoPick@1$PHAssetBurstSelectionTypeNone@0$PHAssetBurstSelectionTypeUserPick@2$PHAssetCollectionSubtypeAlbumCloudShared@101$PHAssetCollectionSubtypeAlbumImported@6$PHAssetCollectionSubtypeAlbumMyPhotoStream@100$PHAssetCollectionSubtypeAlbumRegular@2$PHAssetCollectionSubtypeAlbumSyncedAlbum@5$PHAssetCollectionSubtypeAlbumSyncedEvent@3$PHAssetCollectionSubtypeAlbumSyncedFaces@4$PHAssetCollectionSubtypeAny@9223372036854775807$PHAssetCollectionSubtypeSmartAlbumAllHidden@205$PHAssetCollectionSubtypeSmartAlbumAnimated@214$PHAssetCollectionSubtypeSmartAlbumBursts@207$PHAssetCollectionSubtypeSmartAlbumCinematic@218$PHAssetCollectionSubtypeSmartAlbumDepthEffect@212$PHAssetCollectionSubtypeSmartAlbumFavorites@203$PHAssetCollectionSubtypeSmartAlbumGeneric@200$PHAssetCollectionSubtypeSmartAlbumLivePhotos@213$PHAssetCollectionSubtypeSmartAlbumLongExposures@215$PHAssetCollectionSubtypeSmartAlbumPanoramas@201$PHAssetCollectionSubtypeSmartAlbumRAW@217$PHAssetCollectionSubtypeSmartAlbumRecentlyAdded@206$PHAssetCollectionSubtypeSmartAlbumScreenRecordings@220$PHAssetCollectionSubtypeSmartAlbumScreenshots@211$PHAssetCollectionSubtypeSmartAlbumSelfPortraits@210$PHAssetCollectionSubtypeSmartAlbumSlomoVideos@208$PHAssetCollectionSubtypeSmartAlbumSpatial@219$PHAssetCollectionSubtypeSmartAlbumTimelapses@204$PHAssetCollectionSubtypeSmartAlbumUnableToUpload@216$PHAssetCollectionSubtypeSmartAlbumUserLibrary@209$PHAssetCollectionSubtypeSmartAlbumVideos@202$PHAssetCollectionTypeAlbum@1$PHAssetCollectionTypeMoment@3$PHAssetCollectionTypeSmartAlbum@2$PHAssetEditOperationContent@2$PHAssetEditOperationDelete@1$PHAssetEditOperationProperties@3$PHAssetMediaSubtypeNone@0$PHAssetMediaSubtypePhotoDepthEffect@16$PHAssetMediaSubtypePhotoHDR@2$PHAssetMediaSubtypePhotoLive@8$PHAssetMediaSubtypePhotoPanorama@1$PHAssetMediaSubtypePhotoScreenshot@4$PHAssetMediaSubtypeSpatialMedia@1024$PHAssetMediaSubtypeVideoCinematic@2097152$PHAssetMediaSubtypeVideoHighFrameRate@131072$PHAssetMediaSubtypeVideoScreenRecording@524288$PHAssetMediaSubtypeVideoStreamed@65536$PHAssetMediaSubtypeVideoTimelapse@262144$PHAssetMediaTypeAudio@3$PHAssetMediaTypeImage@1$PHAssetMediaTypeUnknown@0$PHAssetMediaTypeVideo@2$PHAssetPlaybackStyleImage@1$PHAssetPlaybackStyleImageAnimated@2$PHAssetPlaybackStyleLivePhoto@3$PHAssetPlaybackStyleUnsupported@0$PHAssetPlaybackStyleVideo@4$PHAssetPlaybackStyleVideoLooping@5$PHAssetResourceTypeAdjustmentBasePairedVideo@11$PHAssetResourceTypeAdjustmentBasePhoto@8$PHAssetResourceTypeAdjustmentBaseVideo@12$PHAssetResourceTypeAdjustmentData@7$PHAssetResourceTypeAlternatePhoto@4$PHAssetResourceTypeAudio@3$PHAssetResourceTypeFullSizePairedVideo@10$PHAssetResourceTypeFullSizePhoto@5$PHAssetResourceTypeFullSizeVideo@6$PHAssetResourceTypePairedVideo@9$PHAssetResourceTypePhoto@1$PHAssetResourceTypePhotoProxy@19$PHAssetResourceTypeVideo@2$PHAssetResourceUploadJobActionAcknowledge@1$PHAssetResourceUploadJobActionProcess@3$PHAssetResourceUploadJobActionRetry@2$PHAssetResourceUploadJobStateCancelled@5$PHAssetResourceUploadJobStateFailed@3$PHAssetResourceUploadJobStatePending@2$PHAssetResourceUploadJobStateRegistered@1$PHAssetResourceUploadJobStateSucceeded@4$PHAssetResourceUploadJobTypeDownloadOnly@1$PHAssetResourceUploadJobTypeUpload@0$PHAssetSourceTypeCloudShared@2$PHAssetSourceTypeNone@0$PHAssetSourceTypeUserLibrary@1$PHAssetSourceTypeiTunesSynced@4$PHAuthorizationStatusAuthorized@3$PHAuthorizationStatusDenied@2$PHAuthorizationStatusLimited@4$PHAuthorizationStatusNotDetermined@0$PHAuthorizationStatusRestricted@1$PHCollectionEditOperationAddContent@3$PHCollectionEditOperationCreateContent@4$PHCollectionEditOperationDelete@6$PHCollectionEditOperationDeleteContent@1$PHCollectionEditOperationRearrangeContent@5$PHCollectionEditOperationRemoveContent@2$PHCollectionEditOperationRename@7$PHCollectionListSubtypeAny@9223372036854775807$PHCollectionListSubtypeMomentListCluster@1$PHCollectionListSubtypeMomentListYear@2$PHCollectionListSubtypeRegularFolder@100$PHCollectionListSubtypeSmartFolderEvents@200$PHCollectionListSubtypeSmartFolderFaces@201$PHCollectionListTypeFolder@2$PHCollectionListTypeMomentList@1$PHCollectionListTypeSmartFolder@3$PHImageContentModeAspectFill@1$PHImageContentModeAspectFit@0$PHImageContentModeDefault@0$PHImageRequestOptionsDeliveryModeFastFormat@2$PHImageRequestOptionsDeliveryModeHighQualityFormat@1$PHImageRequestOptionsDeliveryModeOpportunistic@0$PHImageRequestOptionsResizeModeExact@2$PHImageRequestOptionsResizeModeFast@1$PHImageRequestOptionsResizeModeNone@0$PHImageRequestOptionsVersionCurrent@0$PHImageRequestOptionsVersionOriginal@2$PHImageRequestOptionsVersionUnadjusted@1$PHInvalidAssetResourceDataRequestID@0$PHInvalidImageRequestID@0$PHLivePhotoEditingErrorCodeAborted@1$PHLivePhotoEditingErrorCodeUnknown@0$PHLivePhotoFrameTypePhoto@0$PHLivePhotoFrameTypeVideo@1$PHLivePhotoRequestIDInvalid@0$PHObjectTypeAsset@1$PHObjectTypeAssetCollection@2$PHObjectTypeCollectionList@3$PHPhotosErrorAccessRestricted@3310$PHPhotosErrorAccessUserDenied@3311$PHPhotosErrorChangeNotSupported@3300$PHPhotosErrorIdentifierNotFound@3201$PHPhotosErrorInternalError@-1$PHPhotosErrorInvalid@-1$PHPhotosErrorInvalidResource@3302$PHPhotosErrorLibraryInFileProviderSyncRoot@5423$PHPhotosErrorLibraryVolumeOffline@3114$PHPhotosErrorLimitExceeded@3307$PHPhotosErrorMissingResource@3303$PHPhotosErrorMultipleIdentifiersFound@3202$PHPhotosErrorNetworkAccessRequired@3164$PHPhotosErrorNetworkError@3169$PHPhotosErrorNotEnoughSpace@3305$PHPhotosErrorOperationInterrupted@3301$PHPhotosErrorPersistentChangeDetailsUnavailable@3210$PHPhotosErrorPersistentChangeTokenExpired@3105$PHPhotosErrorRelinquishingLibraryBundleToWriter@3142$PHPhotosErrorRequestNotSupportedForAsset@3306$PHPhotosErrorSwitchingSystemPhotoLibrary@3143$PHPhotosErrorUserCancelled@3072$PHVideoRequestOptionsDeliveryModeAutomatic@0$PHVideoRequestOptionsDeliveryModeFastFormat@3$PHVideoRequestOptionsDeliveryModeHighQualityFormat@1$PHVideoRequestOptionsDeliveryModeMediumQualityFormat@2$PHVideoRequestOptionsVersionCurrent@0$PHVideoRequestOptionsVersionOriginal@1$"""
32
+ enums = """$PHAccessLevelAddOnly@1$PHAccessLevelReadWrite@2$PHAssetAdjustmentsStateCameraAutoAdjusted@3$PHAssetAdjustmentsStateNone@0$PHAssetAdjustmentsStateUserAdjusted@2$PHAssetBurstSelectionTypeAutoPick@1$PHAssetBurstSelectionTypeNone@0$PHAssetBurstSelectionTypeUserPick@2$PHAssetCollectionSubtypeAlbumCloudShared@101$PHAssetCollectionSubtypeAlbumImported@6$PHAssetCollectionSubtypeAlbumMyPhotoStream@100$PHAssetCollectionSubtypeAlbumRegular@2$PHAssetCollectionSubtypeAlbumSyncedAlbum@5$PHAssetCollectionSubtypeAlbumSyncedEvent@3$PHAssetCollectionSubtypeAlbumSyncedFaces@4$PHAssetCollectionSubtypeAny@9223372036854775807$PHAssetCollectionSubtypeSmartAlbumAllHidden@205$PHAssetCollectionSubtypeSmartAlbumAnimated@214$PHAssetCollectionSubtypeSmartAlbumBursts@207$PHAssetCollectionSubtypeSmartAlbumCinematic@218$PHAssetCollectionSubtypeSmartAlbumDepthEffect@212$PHAssetCollectionSubtypeSmartAlbumFavorites@203$PHAssetCollectionSubtypeSmartAlbumGeneric@200$PHAssetCollectionSubtypeSmartAlbumLivePhotos@213$PHAssetCollectionSubtypeSmartAlbumLongExposures@215$PHAssetCollectionSubtypeSmartAlbumPanoramas@201$PHAssetCollectionSubtypeSmartAlbumRAW@217$PHAssetCollectionSubtypeSmartAlbumRecentlyAdded@206$PHAssetCollectionSubtypeSmartAlbumScreenRecordings@220$PHAssetCollectionSubtypeSmartAlbumScreenshots@211$PHAssetCollectionSubtypeSmartAlbumSelfPortraits@210$PHAssetCollectionSubtypeSmartAlbumSlomoVideos@208$PHAssetCollectionSubtypeSmartAlbumSpatial@219$PHAssetCollectionSubtypeSmartAlbumTimelapses@204$PHAssetCollectionSubtypeSmartAlbumUnableToUpload@216$PHAssetCollectionSubtypeSmartAlbumUserLibrary@209$PHAssetCollectionSubtypeSmartAlbumVideos@202$PHAssetCollectionTypeAlbum@1$PHAssetCollectionTypeMoment@3$PHAssetCollectionTypeSmartAlbum@2$PHAssetEditOperationContent@2$PHAssetEditOperationDelete@1$PHAssetEditOperationProperties@3$PHAssetMediaSubtypeNone@0$PHAssetMediaSubtypePhotoAnimation@64$PHAssetMediaSubtypePhotoDepthEffect@16$PHAssetMediaSubtypePhotoHDR@2$PHAssetMediaSubtypePhotoLive@8$PHAssetMediaSubtypePhotoPanorama@1$PHAssetMediaSubtypePhotoScreenshot@4$PHAssetMediaSubtypeSpatialMedia@1024$PHAssetMediaSubtypeVideoCinematic@2097152$PHAssetMediaSubtypeVideoHighFrameRate@131072$PHAssetMediaSubtypeVideoScreenRecording@524288$PHAssetMediaSubtypeVideoStreamed@65536$PHAssetMediaSubtypeVideoTimelapse@262144$PHAssetMediaTypeAudio@3$PHAssetMediaTypeImage@1$PHAssetMediaTypeUnknown@0$PHAssetMediaTypeVideo@2$PHAssetPlaybackStyleImage@1$PHAssetPlaybackStyleImageAnimated@2$PHAssetPlaybackStyleLivePhoto@3$PHAssetPlaybackStyleUnsupported@0$PHAssetPlaybackStyleVideo@4$PHAssetPlaybackStyleVideoLooping@5$PHAssetPlaybackVariationAutoloop@1$PHAssetPlaybackVariationLongExposure@3$PHAssetPlaybackVariationMirror@2$PHAssetPlaybackVariationNone@0$PHAssetRatingFive@5$PHAssetRatingFour@4$PHAssetRatingOne@1$PHAssetRatingThree@3$PHAssetRatingTwo@2$PHAssetRatingUnset@0$PHAssetResourceTypeAdjustmentBasePairedVideo@11$PHAssetResourceTypeAdjustmentBasePhoto@8$PHAssetResourceTypeAdjustmentBaseVideo@12$PHAssetResourceTypeAdjustmentData@7$PHAssetResourceTypeAlternatePhoto@4$PHAssetResourceTypeAudio@3$PHAssetResourceTypeFullSizePairedVideo@10$PHAssetResourceTypeFullSizePhoto@5$PHAssetResourceTypeFullSizeVideo@6$PHAssetResourceTypePairedVideo@9$PHAssetResourceTypePhoto@1$PHAssetResourceTypePhotoProxy@19$PHAssetResourceTypeVideo@2$PHAssetResourceUploadJobActionAcknowledge@1$PHAssetResourceUploadJobActionProcess@3$PHAssetResourceUploadJobActionRetry@2$PHAssetResourceUploadJobStateCancelled@5$PHAssetResourceUploadJobStateFailed@3$PHAssetResourceUploadJobStatePending@2$PHAssetResourceUploadJobStateRegistered@1$PHAssetResourceUploadJobStateSucceeded@4$PHAssetResourceUploadJobTypeDownloadOnly@1$PHAssetResourceUploadJobTypeUpload@0$PHAssetSourceTypeCloudShared@2$PHAssetSourceTypeNone@0$PHAssetSourceTypeUserLibrary@1$PHAssetSourceTypeiTunesSynced@4$PHAuthorizationStatusAuthorized@3$PHAuthorizationStatusDenied@2$PHAuthorizationStatusLimited@4$PHAuthorizationStatusNotDetermined@0$PHAuthorizationStatusRestricted@1$PHCollectionEditOperationAddContent@3$PHCollectionEditOperationCreateContent@4$PHCollectionEditOperationDelete@6$PHCollectionEditOperationDeleteContent@1$PHCollectionEditOperationRearrangeContent@5$PHCollectionEditOperationRemoveContent@2$PHCollectionEditOperationRename@7$PHCollectionListSubtypeAny@9223372036854775807$PHCollectionListSubtypeMomentListCluster@1$PHCollectionListSubtypeMomentListYear@2$PHCollectionListSubtypeRegularFolder@100$PHCollectionListSubtypeRootFolder@101$PHCollectionListSubtypeSmartFolderEvents@200$PHCollectionListSubtypeSmartFolderFaces@201$PHCollectionListTypeFolder@2$PHCollectionListTypeMomentList@1$PHCollectionListTypeSmartFolder@3$PHImageContentModeAspectFill@1$PHImageContentModeAspectFit@0$PHImageContentModeDefault@0$PHImageRequestOptionsDeliveryModeFastFormat@2$PHImageRequestOptionsDeliveryModeHighQualityFormat@1$PHImageRequestOptionsDeliveryModeOpportunistic@0$PHImageRequestOptionsResizeModeExact@2$PHImageRequestOptionsResizeModeFast@1$PHImageRequestOptionsResizeModeNone@0$PHImageRequestOptionsVersionCurrent@0$PHImageRequestOptionsVersionOriginal@2$PHImageRequestOptionsVersionUnadjusted@1$PHInvalidAssetResourceDataRequestID@0$PHInvalidImageRequestID@0$PHLivePhotoEditingErrorCodeAborted@1$PHLivePhotoEditingErrorCodeUnknown@0$PHLivePhotoFrameTypePhoto@0$PHLivePhotoFrameTypeVideo@1$PHLivePhotoRequestIDInvalid@0$PHObjectTypeAsset@1$PHObjectTypeAssetCollection@2$PHObjectTypeCollectionList@3$PHOriginalResourceChoiceCompressed@0$PHOriginalResourceChoiceRaw@1$PHPhotosErrorAccessRestricted@3310$PHPhotosErrorAccessUserDenied@3311$PHPhotosErrorChangeNotSupported@3300$PHPhotosErrorIdentifierNotFound@3201$PHPhotosErrorInternalError@-1$PHPhotosErrorInvalid@-1$PHPhotosErrorInvalidResource@3302$PHPhotosErrorLibraryInFileProviderSyncRoot@5423$PHPhotosErrorLibraryVolumeOffline@3114$PHPhotosErrorLimitExceeded@3307$PHPhotosErrorMissingResource@3303$PHPhotosErrorMultipleIdentifiersFound@3202$PHPhotosErrorNetworkAccessRequired@3164$PHPhotosErrorNetworkError@3169$PHPhotosErrorNotEnoughSpace@3305$PHPhotosErrorOperationInterrupted@3301$PHPhotosErrorPersistentChangeDetailsUnavailable@3210$PHPhotosErrorPersistentChangeTokenExpired@3105$PHPhotosErrorRelinquishingLibraryBundleToWriter@3142$PHPhotosErrorRequestNotSupportedForAsset@3306$PHPhotosErrorSwitchingSystemPhotoLibrary@3143$PHPhotosErrorUserCancelled@3072$PHVideoRequestOptionsDeliveryModeAutomatic@0$PHVideoRequestOptionsDeliveryModeFastFormat@3$PHVideoRequestOptionsDeliveryModeHighQualityFormat@1$PHVideoRequestOptionsDeliveryModeMediumQualityFormat@2$PHVideoRequestOptionsVersionCurrent@0$PHVideoRequestOptionsVersionOriginal@1$"""
35
33
  misc.update(
36
34
  {
37
35
  "PHLivePhotoEditingErrorCode": NewType("PHLivePhotoEditingErrorCode", int),
@@ -40,13 +38,16 @@ misc.update(
40
38
  "PHVideoRequestOptionsDeliveryMode", int
41
39
  ),
42
40
  "PHAuthorizationStatus": NewType("PHAuthorizationStatus", int),
41
+ "PHAssetAdjustmentsState": NewType("PHAssetAdjustmentsState", int),
43
42
  "PHAssetPlaybackStyle": NewType("PHAssetPlaybackStyle", int),
44
43
  "PHCollectionListSubtype": NewType("PHCollectionListSubtype", int),
45
44
  "PHAssetResourceType": NewType("PHAssetResourceType", int),
46
45
  "PHObjectType": NewType("PHObjectType", int),
46
+ "PHAssetRating": NewType("PHAssetRating", int),
47
47
  "PHAssetMediaSubtype": NewType("PHAssetMediaSubtype", int),
48
48
  "PHCollectionEditOperation": NewType("PHCollectionEditOperation", int),
49
49
  "UIImageOrientation": NewType("UIImageOrientation", int),
50
+ "PHImageRequestOptionsVersion": NewType("PHImageRequestOptionsVersion", int),
50
51
  "PHLivePhotoFrameType": NewType("PHLivePhotoFrameType", int),
51
52
  "PHAssetBurstSelectionType": NewType("PHAssetBurstSelectionType", int),
52
53
  "PHAssetSourceType": NewType("PHAssetSourceType", int),
@@ -54,12 +55,13 @@ misc.update(
54
55
  "PHImageRequestOptionsDeliveryMode": NewType(
55
56
  "PHImageRequestOptionsDeliveryMode", int
56
57
  ),
58
+ "PHAssetPlaybackVariation": NewType("PHAssetPlaybackVariation", int),
57
59
  "PHAssetCollectionSubtype": NewType("PHAssetCollectionSubtype", int),
60
+ "PHOriginalResourceChoice": NewType("PHOriginalResourceChoice", int),
61
+ "PHAssetResourceUploadJobType": NewType("PHAssetResourceUploadJobType", int),
58
62
  "PHAssetResourceUploadJobAction": NewType(
59
63
  "PHAssetResourceUploadJobAction", int
60
64
  ),
61
- "PHAssetResourceUploadJobType": NewType("PHAssetResourceUploadJobType", int),
62
- "PHImageRequestOptionsVersion": NewType("PHImageRequestOptionsVersion", int),
63
65
  "PHVideoRequestOptionsVersion": NewType("PHVideoRequestOptionsVersion", int),
64
66
  "PHAssetCollectionType": NewType("PHAssetCollectionType", int),
65
67
  "PHAssetMediaType": NewType("PHAssetMediaType", int),
@@ -93,6 +95,11 @@ try:
93
95
  b"photoLibraryDidChange:",
94
96
  {"required": True, "retval": {"type": b"v"}, "arguments": {2: {"type": b"@"}}},
95
97
  )
98
+ r(
99
+ b"NSObject",
100
+ b"photoLibraryPersistentChangesDidUpdate:",
101
+ {"required": True, "retval": {"type": b"v"}, "arguments": {2: {"type": b"@"}}},
102
+ )
96
103
  r(b"NSObject", b"renderScale", {"required": True, "retval": {"type": "d"}})
97
104
  r(b"NSObject", b"time", {"required": True, "retval": {"type": "{CMTime=qiIq}"}})
98
105
  r(b"NSObject", b"type", {"required": True, "retval": {"type": "q"}})
@@ -124,6 +131,11 @@ try:
124
131
  r(b"PHAssetChangeRequest", b"isHidden", {"retval": {"type": b"Z"}})
125
132
  r(b"PHAssetChangeRequest", b"setFavorite:", {"arguments": {2: {"type": b"Z"}}})
126
133
  r(b"PHAssetChangeRequest", b"setHidden:", {"arguments": {2: {"type": b"Z"}}})
134
+ r(
135
+ b"PHAssetChangeRequest",
136
+ b"setLivePhotoVideoPlaybackEnabled:",
137
+ {"arguments": {2: {"type": b"Z"}}},
138
+ )
127
139
  r(
128
140
  b"PHAssetCreationRequest",
129
141
  b"supportsAssetResourceTypes:",
@@ -205,6 +217,16 @@ try:
205
217
  }
206
218
  },
207
219
  )
220
+ r(
221
+ b"PHAssetResourceUploadJobOptions",
222
+ b"preventsExpensiveNetworkAccess",
223
+ {"retval": {"type": b"Z"}},
224
+ )
225
+ r(
226
+ b"PHAssetResourceUploadJobOptions",
227
+ b"setPreventsExpensiveNetworkAccess:",
228
+ {"arguments": {2: {"type": b"Z"}}},
229
+ )
208
230
  r(
209
231
  b"PHCachingImageManager",
210
232
  b"allowsCachingHighQualityImages",
@@ -288,6 +310,16 @@ try:
288
310
  }
289
311
  },
290
312
  )
313
+ r(
314
+ b"PHContentEditingInputRequestOptions",
315
+ b"setSkipsDisplaySizeImage:",
316
+ {"arguments": {2: {"type": b"Z"}}},
317
+ )
318
+ r(
319
+ b"PHContentEditingInputRequestOptions",
320
+ b"skipsDisplaySizeImage",
321
+ {"retval": {"type": b"Z"}},
322
+ )
291
323
  r(
292
324
  b"PHContentEditingOutput",
293
325
  b"renderedContentURLForType:error:",
@@ -295,12 +327,18 @@ try:
295
327
  )
296
328
  r(b"PHFetchOptions", b"includeAllBurstAssets", {"retval": {"type": b"Z"}})
297
329
  r(b"PHFetchOptions", b"includeHiddenAssets", {"retval": {"type": "Z"}})
330
+ r(b"PHFetchOptions", b"prefetchAssetExtendedMetadata", {"retval": {"type": b"Z"}})
298
331
  r(
299
332
  b"PHFetchOptions",
300
333
  b"setIncludeAllBurstAssets:",
301
334
  {"arguments": {2: {"type": b"Z"}}},
302
335
  )
303
336
  r(b"PHFetchOptions", b"setIncludeHiddenAssets:", {"arguments": {2: {"type": "Z"}}})
337
+ r(
338
+ b"PHFetchOptions",
339
+ b"setPrefetchAssetExtendedMetadata:",
340
+ {"arguments": {2: {"type": b"Z"}}},
341
+ )
304
342
  r(
305
343
  b"PHFetchOptions",
306
344
  b"setWantsIncrementalChangeDetails:",
@@ -527,6 +565,7 @@ try:
527
565
  )
528
566
  r(b"PHImageRequestOptions", b"isNetworkAccessAllowed", {"retval": {"type": "Z"}})
529
567
  r(b"PHImageRequestOptions", b"isSynchronous", {"retval": {"type": "Z"}})
568
+ r(b"PHImageRequestOptions", b"preferHDR", {"retval": {"type": b"Z"}})
530
569
  r(
531
570
  b"PHImageRequestOptions",
532
571
  b"progressHandler",
@@ -555,6 +594,7 @@ try:
555
594
  b"setNetworkAccessAllowed:",
556
595
  {"arguments": {2: {"type": "Z"}}},
557
596
  )
597
+ r(b"PHImageRequestOptions", b"setPreferHDR:", {"arguments": {2: {"type": b"Z"}}})
558
598
  r(
559
599
  b"PHImageRequestOptions",
560
600
  b"setProgressHandler:",
@@ -671,6 +711,7 @@ try:
671
711
  b"isNetworkAccessAllowed",
672
712
  {"retval": {"type": b"Z"}},
673
713
  )
714
+ r(b"PHLivePhotoRequestOptions", b"preferHDR", {"retval": {"type": b"Z"}})
674
715
  r(
675
716
  b"PHLivePhotoRequestOptions",
676
717
  b"progressHandler",
@@ -694,6 +735,11 @@ try:
694
735
  b"setNetworkAccessAllowed:",
695
736
  {"arguments": {2: {"type": b"Z"}}},
696
737
  )
738
+ r(
739
+ b"PHLivePhotoRequestOptions",
740
+ b"setPreferHDR:",
741
+ {"arguments": {2: {"type": b"Z"}}},
742
+ )
697
743
  r(
698
744
  b"PHLivePhotoRequestOptions",
699
745
  b"setProgressHandler:",
@@ -739,11 +785,22 @@ try:
739
785
  }
740
786
  },
741
787
  )
788
+ r(
789
+ b"PHPhotoLibrary",
790
+ b"disableUploadJobExtensionWithError:",
791
+ {"retval": {"type": b"Z"}, "arguments": {2: {"type_modifier": b"o"}}},
792
+ )
793
+ r(
794
+ b"PHPhotoLibrary",
795
+ b"enableUploadJobExtensionWithOptions:error:",
796
+ {"retval": {"type": b"Z"}, "arguments": {3: {"type_modifier": b"o"}}},
797
+ )
742
798
  r(
743
799
  b"PHPhotoLibrary",
744
800
  b"fetchPersistentChangesSinceToken:error:",
745
801
  {"arguments": {3: {"type_modifier": b"o"}}},
746
802
  )
803
+ r(b"PHPhotoLibrary", b"isUploadJobExtensionEnabled", {"retval": {"type": b"Z"}})
747
804
  r(
748
805
  b"PHPhotoLibrary",
749
806
  b"performChanges:completionHandler:",
@@ -812,6 +869,19 @@ try:
812
869
  }
813
870
  },
814
871
  )
872
+ r(
873
+ b"PHPhotoLibrary",
874
+ b"setUploadJobExtensionEnabled:error:",
875
+ {
876
+ "retval": {"type": b"Z"},
877
+ "arguments": {2: {"type": b"Z"}, 3: {"type_modifier": b"o"}},
878
+ },
879
+ )
880
+ r(
881
+ b"PHPhotoLibrary",
882
+ b"setUploadJobExtensionOptions:error:",
883
+ {"retval": {"type": b"Z"}, "arguments": {3: {"type_modifier": b"o"}}},
884
+ )
815
885
  r(b"PHProject", b"hasProjectPreview", {"retval": {"type": "Z"}})
816
886
  r(b"PHVideoRequestOptions", b"isNetworkAccessAllowed", {"retval": {"type": b"Z"}})
817
887
  r(
@@ -864,6 +934,9 @@ finally:
864
934
  objc.registerNewKeywordsFromSelector(
865
935
  "PHAdjustmentData", b"initWithFormatIdentifier:formatVersion:data:"
866
936
  )
937
+ objc.registerNewKeywordsFromSelector(
938
+ "PHCloudIdentifier", b"initWithArchivalStringValue:"
939
+ )
867
940
  objc.registerNewKeywordsFromSelector("PHCloudIdentifier", b"initWithStringValue:")
868
941
  objc.registerNewKeywordsFromSelector(
869
942
  "PHContentEditingOutput", b"initWithContentEditingInput:"
@@ -903,5 +976,11 @@ objc.registerNewKeywords(
903
976
  "creationRequestForCollectionListWithTitle_",
904
977
  )
905
978
  expressions = {}
979
+ formal_protocols = {
980
+ "PHLivePhotoFrame": "PHLivePhotoFrame",
981
+ "PHPhotoLibraryAvailabilityObserver": "PHPhotoLibraryAvailabilityObserver",
982
+ "PHPhotoLibraryChangeObserver": "PHPhotoLibraryChangeObserver",
983
+ "PHPhotoLibraryPersistentChangesObserver": "PHPhotoLibraryPersistentChangesObserver",
984
+ }
906
985
 
907
986
  # END OF FILE
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pyobjc-framework-Photos
3
- Version: 12.2.2
3
+ Version: 13.0
4
4
  Summary: Wrappers for the framework Photos on macOS
5
5
  Home-page: https://github.com/ronaldoussoren/pyobjc
6
6
  Author: Ronald Oussoren
@@ -17,21 +17,21 @@ Classifier: Operating System :: MacOS :: MacOS X
17
17
  Classifier: Programming Language :: Python
18
18
  Classifier: Programming Language :: Python :: 3
19
19
  Classifier: Programming Language :: Python :: 3 :: Only
20
- Classifier: Programming Language :: Python :: 3.10
21
20
  Classifier: Programming Language :: Python :: 3.11
22
21
  Classifier: Programming Language :: Python :: 3.12
23
22
  Classifier: Programming Language :: Python :: 3.13
24
23
  Classifier: Programming Language :: Python :: 3.14
25
24
  Classifier: Programming Language :: Python :: 3.15
25
+ Classifier: Programming Language :: Python :: 3.16
26
26
  Classifier: Programming Language :: Python :: Implementation :: CPython
27
27
  Classifier: Programming Language :: Python :: Free Threading :: 3 - Stable
28
28
  Classifier: Programming Language :: Objective C
29
29
  Classifier: Topic :: Software Development :: Libraries :: Python Modules
30
30
  Classifier: Topic :: Software Development :: User Interfaces
31
- Requires-Python: >=3.10
31
+ Requires-Python: >=3.11
32
32
  Description-Content-Type: text/x-rst; charset=UTF-8
33
- Requires-Dist: pyobjc-core>=12.2.2
34
- Requires-Dist: pyobjc-framework-Cocoa>=12.2.2
33
+ Requires-Dist: pyobjc-core>=13.0
34
+ Requires-Dist: pyobjc-framework-Cocoa>=13.0
35
35
  Dynamic: author
36
36
  Dynamic: author-email
37
37
  Dynamic: classifier
@@ -22,6 +22,7 @@ PyObjCTest/test_phasset.py
22
22
  PyObjCTest/test_phassetchangerequest.py
23
23
  PyObjCTest/test_phassetresourcecreationoptions.py
24
24
  PyObjCTest/test_phassetresourcemanager.py
25
+ PyObjCTest/test_phassetresourceuploadjoboptions.py
25
26
  PyObjCTest/test_phchange.py
26
27
  PyObjCTest/test_phcloudidentifier.py
27
28
  PyObjCTest/test_phcollection.py
@@ -41,5 +42,5 @@ PyObjCTest/test_phphotolibrary.py
41
42
  PyObjCTest/test_phproject.py
42
43
  metadata/Photos.fwinfo
43
44
  metadata/metadata.ini
44
- metadata/raw/arm64-26.5.fwinfo
45
- metadata/raw/x86_64-26.5.fwinfo
45
+ metadata/raw/arm64-27.fwinfo
46
+ metadata/raw/x86_64-27.fwinfo
@@ -0,0 +1,3 @@
1
+ macOS 27.2 (26B123)
2
+ Apple clang version 21.0.0 (clang-2100.4.1.1)
3
+ SDK: macOS 27.2
@@ -0,0 +1,2 @@
1
+ pyobjc-core>=13.0
2
+ pyobjc-framework-Cocoa>=13.0
@@ -2,6 +2,10 @@
2
2
  #include "Python.h"
3
3
  #include "pyobjc-api.h"
4
4
 
5
+ #ifdef USE_STATIC_ANALYZER
6
+ #include "../../pyobjc-core/Modules/objc/python-api-used.h"
7
+ #endif
8
+
5
9
  #import <Photos/Photos.h>
6
10
 
7
11
  /* We include the source code here instead of
@@ -9,6 +13,8 @@
9
13
  */
10
14
  #include "_Photos_protocols.m"
11
15
 
16
+ NS_ASSUME_NONNULL_BEGIN
17
+
12
18
  static PyMethodDef mod_methods[] = {
13
19
  {0, 0, 0, 0} /* sentinel */
14
20
  };
@@ -54,10 +60,11 @@ static struct PyModuleDef mod_module = {
54
60
  .m_free = NULL,
55
61
  };
56
62
 
57
- PyObject* PyInit__Photos(void);
63
+ PyObject* _Nullable PyInit__Photos(void);
58
64
 
59
- PyObject* __attribute__((__visibility__("default")))
65
+ PyObject* _Nullable __attribute__((__visibility__("default")))
60
66
  PyInit__Photos(void)
61
67
  {
62
68
  return PyModuleDef_Init(&mod_module);
63
69
  }
70
+ NS_ASSUME_NONNULL_END
@@ -1,8 +1,8 @@
1
- /*
2
- * This file is generated by objective.metadata
3
- *
4
- * Last update: Wed Jan 16 13:10:52 2013
5
- */
1
+ // LCOV_EXCL_START
2
+ // This function is only present to ensure protocols are
3
+ // available at runtime.
4
+ NS_ASSUME_NONNULL_BEGIN
5
+
6
6
  static void __attribute__((__used__))
7
7
  use_protocols(void)
8
8
  {
@@ -20,3 +20,6 @@ use_protocols(void)
20
20
  Py_XDECREF(p);
21
21
  #endif
22
22
  }
23
+
24
+ NS_ASSUME_NONNULL_END
25
+ // LCOV_EXCL_STOP
@@ -60,6 +60,11 @@ typedef int(RegisterMethodMappingFunctionType)(
60
60
  PyObject* _Nonnull const* _Nonnull, size_t),
61
61
  IMP _Nullable (*_Nonnull)(PyObject* _Nonnull, PyObject* _Nonnull));
62
62
 
63
+ #ifndef PyObjC_FUNCTION_CALL_H
64
+ typedef PyObject* _Nullable (*PyObjC_FunctionCallFunc)(
65
+ PyObject* meth, PyObject* _Nonnull const* _Nonnull args, size_t nargs);
66
+ #endif
67
+
63
68
  struct pyobjc_api {
64
69
  int api_version; /* API version */
65
70
  size_t struct_len; /* Length of this struct */
@@ -117,6 +122,9 @@ struct pyobjc_api {
117
122
 
118
123
  PyObject* _Nullable (*_Nonnull createopaquepointertype)(const char*, const char*,
119
124
  const char*);
125
+ int (*_Nonnull register_functioncaller)(void*, PyObjC_FunctionCallFunc);
126
+ PyObject* _Nullable (*_Nonnull create_registered_struct)(
127
+ const char*, Py_ssize_t, const char* _Nonnull* _Nullable, Py_ssize_t*);
120
128
  };
121
129
 
122
130
  #ifndef PYOBJC_BUILD
@@ -159,6 +167,8 @@ static struct pyobjc_api* PyObjC_API;
159
167
  #define PyObjC_CheckArgCount (PyObjC_API->checkargcount)
160
168
  #define PyObjC_CheckNoKwnames (PyObjC_API->checknokwnames)
161
169
  #define PyObjCCreateOpaquePointerType (PyObjC_API->createopaquepointertype)
170
+ #define PyObjCRegister_FunctionCaller (PyObjC_API->register_functioncaller)
171
+ #define PyObjC_CreateRegisteredStruct (PyObjC_API->create_registered_struct)
162
172
 
163
173
  typedef void (*PyObjC_Function_Pointer)(void);
164
174
  typedef struct PyObjC_function_map {
@@ -178,21 +188,25 @@ static inline int
178
188
  PyObjC_ImportAPI(PyObject* calling_module)
179
189
  {
180
190
  PyObjC_API = (struct pyobjc_api*)PyCapsule_Import("objc." PYOBJC_API_NAME, 0);
181
- if (PyObjC_API == NULL) {
182
- return -1;
191
+ if (PyObjC_API == NULL) { // LCOV_BR_EXCL_LINE
192
+ return -1; // LCOV_EXCL_LINE
183
193
  }
184
- if (PyObjC_API->api_version != PYOBJC_API_VERSION) {
194
+ if (PyObjC_API->api_version != PYOBJC_API_VERSION) { // LCOV_BR_EXCL_LINE
195
+ // LCOV_EXCL_START
185
196
  PyErr_Format(PyExc_RuntimeError,
186
197
  "Wrong version of PyObjC C API (got %d, expected %d)",
187
198
  (int)PyObjC_API->api_version, (int)PYOBJC_API_VERSION);
188
199
  return -1;
200
+ // LCOV_EXCL_STOP
189
201
  }
190
202
 
191
- if (PyObjC_API->struct_len < PyObjC_EXPECTED_STRUCT_SIZE) {
203
+ if (PyObjC_API->struct_len < PyObjC_EXPECTED_STRUCT_SIZE) { // LCOV_EXCL_LINE
204
+ // LCOV_EXCL_START
192
205
  PyErr_Format(PyExc_RuntimeError,
193
206
  "Wrong struct-size of PyObjC C API (got %d, expected %d)",
194
207
  (int)PyObjC_API->struct_len, (int)sizeof(struct pyobjc_api));
195
208
  return -1;
209
+ // LCOV_EXCL_STOP
196
210
  }
197
211
 
198
212
  /* Current pyobjc implementation doesn't allow deregistering
@@ -167,24 +167,6 @@ _PyObjCTuple_GetItem(PyObject* tuple, Py_ssize_t idx)
167
167
  PyGILState_Release(_GILState); \
168
168
  } while (0)
169
169
 
170
- #if PY_VERSION_HEX < 0x030a0000
171
-
172
- static inline PyObject*
173
- Py_NewRef(PyObject* o)
174
- {
175
- Py_INCREF(o);
176
- return o;
177
- }
178
-
179
- static inline PyObject*
180
- Py_XNewRef(PyObject* o)
181
- {
182
- Py_XINCREF(o);
183
- return o;
184
- }
185
-
186
- #endif /* PY_VERSION_HEX < 0x030a0000 */
187
-
188
170
  #if PY_VERSION_HEX < 0x030d0000
189
171
  #define Py_BEGIN_CRITICAL_SECTION(value) \
190
172
  { \
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pyobjc-framework-Photos
3
- Version: 12.2.2
3
+ Version: 13.0
4
4
  Summary: Wrappers for the framework Photos on macOS
5
5
  Home-page: https://github.com/ronaldoussoren/pyobjc
6
6
  Author: Ronald Oussoren
@@ -17,21 +17,21 @@ Classifier: Operating System :: MacOS :: MacOS X
17
17
  Classifier: Programming Language :: Python
18
18
  Classifier: Programming Language :: Python :: 3
19
19
  Classifier: Programming Language :: Python :: 3 :: Only
20
- Classifier: Programming Language :: Python :: 3.10
21
20
  Classifier: Programming Language :: Python :: 3.11
22
21
  Classifier: Programming Language :: Python :: 3.12
23
22
  Classifier: Programming Language :: Python :: 3.13
24
23
  Classifier: Programming Language :: Python :: 3.14
25
24
  Classifier: Programming Language :: Python :: 3.15
25
+ Classifier: Programming Language :: Python :: 3.16
26
26
  Classifier: Programming Language :: Python :: Implementation :: CPython
27
27
  Classifier: Programming Language :: Python :: Free Threading :: 3 - Stable
28
28
  Classifier: Programming Language :: Objective C
29
29
  Classifier: Topic :: Software Development :: Libraries :: Python Modules
30
30
  Classifier: Topic :: Software Development :: User Interfaces
31
- Requires-Python: >=3.10
31
+ Requires-Python: >=3.11
32
32
  Description-Content-Type: text/x-rst; charset=UTF-8
33
- Requires-Dist: pyobjc-core>=12.2.2
34
- Requires-Dist: pyobjc-framework-Cocoa>=12.2.2
33
+ Requires-Dist: pyobjc-core>=13.0
34
+ Requires-Dist: pyobjc-framework-Cocoa>=13.0
35
35
  Dynamic: author
36
36
  Dynamic: author-email
37
37
  Dynamic: classifier
@@ -5,5 +5,5 @@ import Photos
5
5
 
6
6
  class TestPHAdjustmentData(TestCase):
7
7
  @min_os_level("10.11")
8
- def testClasses(self):
8
+ def test_classes(self):
9
9
  self.assertIsInstance(Photos.PHAdjustmentData, objc.objc_class)
@@ -4,20 +4,20 @@ import Photos
4
4
 
5
5
  class TestPHAsset(TestCase):
6
6
  @min_os_level("10.13")
7
- def testMethods(self):
7
+ def test_methods(self):
8
8
  self.assertResultIsBOOL(Photos.PHAsset.isHidden)
9
9
  self.assertResultIsBOOL(Photos.PHAsset.isFavorite)
10
10
 
11
11
  @min_os_level("10.13")
12
12
  @max_os_level("10.14")
13
- def testMethods10_13_removed_in_10_15(self):
13
+ def test_methods10_13_removed_in_10_15(self):
14
14
  self.assertResultIsBOOL(Photos.PHAsset.isSyncFailureHidden)
15
15
 
16
16
  @min_os_level("10.15")
17
- def testMethods10_15(self):
17
+ def test_methods10_15(self):
18
18
  self.assertResultIsBOOL(Photos.PHAsset.representsBurst)
19
19
  self.assertResultIsBOOL(Photos.PHAsset.canPerformEditOperation_)
20
20
 
21
21
  @min_os_level("13.0")
22
- def testMethods13_0(self):
22
+ def test_methods13_0(self):
23
23
  self.assertResultIsBOOL(Photos.PHAsset.hasAdjustments)
@@ -5,7 +5,7 @@ import Photos
5
5
 
6
6
  class TestPHAssetChangeRequest(TestCase):
7
7
  @min_os_level("10.15")
8
- def testMethods(self):
8
+ def test_methods(self):
9
9
  self.assertResultIsBOOL(Photos.PHAssetChangeRequest.isFavorite)
10
10
  self.assertArgIsBOOL(Photos.PHAssetChangeRequest.setFavorite_, 0)
11
11
 
@@ -37,3 +37,16 @@ class TestPHAssetChangeRequest(TestCase):
37
37
  self.assertIsInstance(Photos.PHContentEditingInputResultIsInCloudKey, str)
38
38
  self.assertIsInstance(Photos.PHContentEditingInputCancelledKey, str)
39
39
  self.assertIsInstance(Photos.PHContentEditingInputErrorKey, str)
40
+
41
+ @min_os_level("27.0")
42
+ def test_methods27_0(self):
43
+ self.assertArgIsBOOL(
44
+ Photos.PHAssetChangeRequest.setLivePhotoVideoPlaybackEnabled_, 0
45
+ )
46
+
47
+ self.assertResultIsBOOL(
48
+ Photos.PHContentEditingInputRequestOptions.skipsDisplaySizeImage
49
+ )
50
+ self.assertArgIsBOOL(
51
+ Photos.PHContentEditingInputRequestOptions.setSkipsDisplaySizeImage_, 0
52
+ )
@@ -4,7 +4,7 @@ import Photos
4
4
 
5
5
  class TestPHAssetResourceCreationOptions(TestCase):
6
6
  @min_os_level("10.15")
7
- def testMethods(self):
7
+ def test_methods(self):
8
8
  self.assertResultIsBOOL(Photos.PHAssetResourceCreationOptions.shouldMoveFile)
9
9
  self.assertArgIsBOOL(
10
10
  Photos.PHAssetResourceCreationOptions.setShouldMoveFile_, 0
@@ -7,7 +7,7 @@ PHAssetResourceProgressHandler = b"vd"
7
7
 
8
8
  class TestPHAssetResourceManager(TestCase):
9
9
  @min_os_level("10.15")
10
- def testMethods(self):
10
+ def test_methods(self):
11
11
  self.assertResultIsBOOL(
12
12
  Photos.PHContentEditingInputRequestOptions.isNetworkAccessAllowed
13
13
  )
@@ -0,0 +1,13 @@
1
+ from PyObjCTools.TestSupport import TestCase, min_os_level
2
+ import Photos
3
+
4
+
5
+ class TestPHAssetResourceUploadJobOptions(TestCase):
6
+ @min_os_level("27.0")
7
+ def test_methods(self):
8
+ self.assertResultIsBOOL(
9
+ Photos.PHAssetResourceUploadJobOptions.preventsExpensiveNetworkAccess
10
+ )
11
+ self.assertArgIsBOOL(
12
+ Photos.PHAssetResourceUploadJobOptions.setPreventsExpensiveNetworkAccess_, 0
13
+ )
@@ -4,7 +4,7 @@ import Photos
4
4
 
5
5
  class TestPHChange(TestCase):
6
6
  @min_os_level("10.13")
7
- def testMethods(self):
7
+ def test_methods(self):
8
8
  self.assertResultIsBOOL(Photos.PHObjectChangeDetails.assetContentChanged)
9
9
  self.assertResultIsBOOL(Photos.PHObjectChangeDetails.objectWasDeleted)
10
10
 
@@ -4,5 +4,5 @@ import Photos
4
4
 
5
5
  class TestPHCloudIdentifier(TestCase):
6
6
  @min_os_level("10.13")
7
- def testConstants(self):
7
+ def test_constants(self):
8
8
  self.assertIsInstance(Photos.PHLocalIdentifierNotFound, str)
@@ -4,7 +4,7 @@ import Photos
4
4
 
5
5
  class TestPHCollection(TestCase):
6
6
  @min_os_level("10.15")
7
- def testMethods10_15(self):
7
+ def test_methods10_15(self):
8
8
  self.assertResultIsBOOL(Photos.PHCollection.canContainAssets)
9
9
  self.assertResultIsBOOL(Photos.PHCollection.canContainCollections)
10
10
  self.assertResultIsBOOL(Photos.PHCollection.canPerformEditOperation_)
@@ -5,5 +5,5 @@ import Photos
5
5
 
6
6
  class TestPHContentEditingInput(TestCase):
7
7
  @min_os_level("10.11")
8
- def testClasses(self):
8
+ def test_classes(self):
9
9
  self.assertIsInstance(Photos.PHContentEditingInput, objc.objc_class)
@@ -5,7 +5,7 @@ import Photos
5
5
 
6
6
  class TestPHContentEditingOutput(TestCase):
7
7
  @min_os_level("10.11")
8
- def testClasses(self):
8
+ def test_classes(self):
9
9
  self.assertIsInstance(Photos.PHContentEditingOutput, objc.objc_class)
10
10
 
11
11
  @min_os_level("14.0")