diff --git a/docs/.buildinfo b/docs/.buildinfo index 91d9676..61ba802 100644 --- a/docs/.buildinfo +++ b/docs/.buildinfo @@ -1,4 +1,4 @@ # Sphinx build info version 1 # This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. -config: 2e74551a1444d2879690ad56cf8bddff +config: 0ebaf3cf0891817c3abfda8211012901 tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/docs/_modules/index.html b/docs/_modules/index.html index 64dc8db..8d18f5c 100644 --- a/docs/_modules/index.html +++ b/docs/_modules/index.html @@ -5,7 +5,7 @@
-
""" Provides PhotosLibrary, Photo, Album classes to interact with Photos App """
+from __future__ import annotations
+
import datetime
import glob
import os
@@ -49,6 +51,9 @@ Source code for photoscript
from photoscript.utils import ditto, findfiles
from .script_loader import run_script
+from .utils import get_os_version
+
+MACOS_VERSION = get_os_version()
""" In Catalina / Photos 5+, UUIDs in AppleScript have suffix that doesn't
appear in actual database value. These need to be dropped to be compatible
@@ -58,6 +63,29 @@ Source code for photoscript
UUID_SUFFIX_FOLDER = "/L0/020"
+def uuid_to_id(uuid: str, suffix: str) -> tuple[str, str]:
+ """Converts UUID betweens formats used by osxphotos and Photos app
+
+ Args:
+ uuid: UUID as string
+ suffix: suffix to add to UUID if needed to form id
+
+ Returns:
+ tuple of (uuid, id)
+ """
+ id_ = uuid
+ if MACOS_VERSION >= (10, 15, 0):
+ # In Photos 5+ (Catalina/10.15), UUIDs in AppleScript have suffix that doesn't
+ # appear in actual database value. Suffix needs to be added to be compatible
+ # with AppleScript (id_) and dropped for osxphotos (uuid)
+ if len(uuid.split("/")) == 1:
+ # osxphotos style UUID without the suffix
+ id_ = f"{uuid}{suffix}"
+ else:
+ uuid = uuid.split("/")[0]
+ return uuid, id_
+
+
class AppleScriptError(Exception):
def __init__(self, *message):
super().__init__(*message)
@@ -158,14 +186,14 @@ Source code for photoscript
Args:
search: optional text string to search for (returns matching items)
uuid: optional list of UUIDs to get
- range\_: optional list of [start, stop] sequence of photos to get
+ range: optional list of [start, stop] sequence of photos to get
Returns:
Generator that yields Photo objects
Raises:
- ValueError if more than one of search, uuid, range\_ passed or invalid range\_
- TypeError if list not passed for range\_
+ ValueError if more than one of search, uuid, range passed or invalid range
+ TypeError if list not passed for range
Note: photos() returns a generator instead of a list because retrieving all the photos
from a large Photos library can take a very long time--on my system, the rate is about 1
@@ -173,14 +201,13 @@ Source code for photoscript
anyway to speed it up. Using a generator allows you process photos individually rather
than waiting, possibly hours, for Photos to return the results.
- range\_ works like python's range function. Thus range\_=[0,4] will return
- Photos 0, 1, 2, 3; range\_=[10] returns the first 10 photos in the library;
- range\_ start must be in range 0 to len(PhotosLibrary())-1,
+ range works like python's range function. Thus range=[0,4] will return
+ Photos 0, 1, 2, 3; range=[10] returns the first 10 photos in the library;
+ range start must be in range 0 to len(PhotosLibrary())-1,
stop in range 1 to len(PhotosLibrary()). You may be able to optimize the speed by which
- photos are return by chunking up requests in batches of photos using range\_,
+ photos are return by chunking up requests in batches of photos using range,
e.g. request 10 photos at a time.
"""
-
if len([x for x in [search, uuid, range_] if x]) > 1:
raise ValueError("Cannot pass more than one of search, uuid, range_")
@@ -218,10 +245,7 @@ Source code for photoscript
photo_ids = run_script("photosLibraryGetPhotoByRange", start + 1, stop)
- if photo_ids:
- return self._iterphotos(uuids=photo_ids)
- else:
- return []
+ return self._iterphotos(uuids=photo_ids) if photo_ids else []
def _iterphotos(self, uuids=None):
if uuids:
@@ -315,7 +339,7 @@ Source code for photoscript
album_ids = run_script("photosLibraryAlbumIDs", top_level)
return [Album(uuid) for uuid in album_ids]
-[docs] def create_album(self, name, folder=None):
+[docs] def create_album(self, name, folder: "Folder" = None) -> "Album":
"""creates an album
Args:
@@ -332,14 +356,16 @@ Source code for photoscript
if folder is None:
album_id = run_script("photosLibraryCreateAlbum", name)
else:
- album_id = run_script("photosLibraryCreateAlbumAtFolder", name, folder.id)
+ album_id = run_script(
+ "photosLibraryCreateAlbumAtFolder", name, folder.idstring
+ )
- if album_id != 0:
+ if album_id != kMissingValue:
return Album(album_id)
else:
raise AppleScriptError(f"Could not create album {name}")
-[docs] def delete_album(self, album):
+[docs] def delete_album(self, album: "Album"):
"""deletes album (but does not delete photos in the album)
Args:
@@ -347,34 +373,47 @@ Source code for photoscript
"""
return run_script("photosLibraryDeleteAlbum", album.id)
-[docs] def folder(self, *name, uuid=None, top_level=True):
+[docs] def folder(
+ self, name: str = None, path: list[str] = None, uuid: str = None, top_level=True
+ ):
"""Folder instance by name or uuid
Args:
- name: name of folder
- uuid: id of folder
+ name: name of folder, e.g. "My Folder"
+ path: path of folder as list of strings, e.g. ["My Folder", "Subfolder"]
+ uuid: id of folder, e.g. "F1234567-1234-1234-1234-1234567890AB"
top_level: if True, only searches top level folders by name; default is True
Returns:
Folder object or None if folder could not be found
Raises:
- ValueError if both name and id passed or neither passed.
+ ValueError not one of name, path, or uuid is passed
- Must pass only name or id but not both.
- If more than one folder with same name, returns first one found.
+ Notes:
+ Must pass one of path, name, or uuid but not more than one
+ If more than one folder with same name, returns first one found.
"""
- if (not name and uuid is None) or (name and uuid is not None):
- raise ValueError("Must pass only name or uuid but not both")
+ if sum(bool(x) for x in [name, path, uuid]) != 1:
+ raise ValueError(
+ "Must pass one of name, path, or uuid but not more than one"
+ )
+
+ if path:
+ idstring = run_script("folderGetIDStringFromPath", path)
+ return Folder(idstring=idstring) if idstring != kMissingValue else None
if name:
- uuid = run_script("folderByName", name[0], top_level)
- if uuid != 0:
- return Folder(uuid)
- else:
- return None
- else:
- return Folder(uuid)
+ idstring = run_script(
+ "photosLibraryGetFolderIDStringForName", name, top_level
+ )
+ return Folder(idstring=idstring) if idstring != kMissingValue else None
+
+ if uuid:
+ idstring = run_script(
+ "photosLibraryGetFolderIDStringForID", uuid, top_level
+ )
+ return Folder(idstring=idstring) if idstring != kMissingValue else None
[docs] def folder_by_path(self, folder_path):
"""Return folder in the library by path
@@ -385,18 +424,15 @@ Source code for photoscript
Returns:
Folder object for folder at folder_path or None if not found
"""
- folder_id = run_script("folderByPath", folder_path)
- if folder_id != 0:
- return Folder(folder_id)
- else:
- return None
+ folder_id = run_script("folderIDByPath", folder_path)
+ return Folder(folder_id) if folder_id != kMissingValue else None
[docs] def folders(self, top_level=True):
"""list of Folder objects for all folders"""
folder_ids = run_script("photosLibraryFolderIDs", top_level)
return [Folder(uuid) for uuid in folder_ids]
-[docs] def create_folder(self, name, folder=None):
+[docs] def create_folder(self, name: str, folder: "Folder" = None) -> "Folder":
"""creates a folder
Args:
@@ -413,10 +449,12 @@ Source code for photoscript
if folder is None:
folder_id = run_script("photosLibraryCreateFolder", name)
else:
- folder_id = run_script("photosLibraryCreateFolderAtFolder", name, folder.id)
+ folder_id = run_script(
+ "photosLibraryCreateFolderAtFolder", name, folder.idstring
+ )
- if folder_id != 0:
- return Folder(folder_id)
+ if folder_id != kMissingValue:
+ return Folder(idstring=folder_id)
else:
raise AppleScriptError(f"Could not create folder {name}")
@@ -481,17 +519,23 @@ Source code for photoscript
album = folder.create_album(album_name)
return album
-[docs] def delete_folder(self, folder):
- """Deletes folder
+[docs] def delete_folder(self, folder: "Folder"):
+ """Deletes folder (and all its sub-folders and albums)
Args:
folder: a Folder object for folder to delete
+
+ Notes:
+ On macOS 10.15 & above, only top-level folders can be deleted.
+ Sub-folders cannot be deleted due to a bug in Photos' AppleScript
+ implementation.
"""
- return run_script("photosLibraryDeleteFolder", folder.id)
+ return run_script("photosLibraryDeleteFolder", folder.idstring)
def __len__(self):
return run_script("photosLibraryCount")
+ # TODO: add a temp_album() method that creates a temporary album
def _temp_album_name(self):
"""get a temporary album name that doesn't clash with album in the library"""
temp_name = self._temp_name()
@@ -588,17 +632,9 @@ Source code for photoscript
[docs]class Album:
def __init__(self, uuid):
- id_ = uuid
# check to see if we need to add UUID suffix
- if float(PhotosLibrary().version) >= 5.0:
- if len(uuid.split("/")) == 1:
- # osxphotos style UUID without the suffix
- id_ = f"{uuid}{UUID_SUFFIX_ALBUM}"
- else:
- uuid = uuid.split("/")[0]
-
- valuuidalbum = run_script("albumExists", id_)
- if valuuidalbum:
+ uuid, id_ = uuid_to_id(uuid, UUID_SUFFIX_ALBUM)
+ if valuuidalbum := run_script("albumExists", id_):
self.id = id_
self._uuid = uuid
else:
@@ -796,39 +832,89 @@ Source code for photoscript
[docs]class Folder:
- def __init__(self, uuid):
- id_ = uuid
- # check to see if we need to add UUID suffix
- if float(PhotosLibrary().version) >= 5.0:
- if len(uuid.split("/")) == 1:
- # osxphotos style UUID without the suffix
- id_ = f"{uuid}{UUID_SUFFIX_FOLDER}"
- else:
- uuid = uuid.split("/")[0]
+ def __init__(
+ self,
+ uuid: str | None = None,
+ path: list[str] | None = None,
+ idstring: str | None = None,
+ ):
+ """Create a Folder object; only one of path, uuid, or idstring should be specified
- valid_folder = run_script("folderExists", id_)
- if valid_folder:
- self.id = id_
- self._uuid = uuid
+ The preferred method is to use the path argument or idstring to specify the folder
+ as this is much faster than using uuid. The uuid argument is listed first for
+ backwards compatibility.
+
+ Args:
+ path: list of folder names in descending order from parent to child: ["Folder", "SubFolder"]
+ uuid: uuid of folder: "E0CD4B6C-CB43-46A6-B8A3-67D1FB4D0F3D/L0/020" or "E0CD4B6C-CB43-46A6-B8A3-67D1FB4D0F3D"
+ idstring: idstring of folder:
+ "folder id(\"E0CD4B6C-CB43-46A6-B8A3-67D1FB4D0F3D/L0/020\") of folder id(\"CB051A4C-2CB7-4B90-B59B-08CC4D0C2823/L0/020\")"
+ """
+ if sum(bool(x) for x in (path, uuid, idstring)) != 1:
+ raise ValueError(
+ "One (and only one) of path, uuid, or idstring must be specified"
+ )
+
+ if uuid is not None:
+ uuid, _id = uuid_to_id(uuid, UUID_SUFFIX_FOLDER)
else:
- raise ValueError(f"Invalid folder id: {uuid}")
+ _id = None
+
+ self._path, self._uuid, self._id, self._idstring = path, uuid, _id, idstring
+
+ # if initialized with path or uuid, need to initialize idstring
+ if self._path is not None:
+ self._idstring = run_script("folderGetIDStringFromPath", self._path)
+ if self._idstring == kMissingValue:
+ raise ValueError(f"Folder at path {self._path} does not exist")
+ elif self._id is not None:
+ # if uuid was passed, _id will have been initialized above
+ # second argument is False so search is not limited to top-level folders
+ self._idstring = run_script(
+ "photosLibraryGetFolderIDStringForID", self._id, False
+ )
+ if self._idstring == kMissingValue:
+ raise ValueError(f"Folder id {self._id} does not exist")
+
+ if not run_script("folderExists", self._idstring):
+ raise ValueError(f"Folder {self._idstring} does not exist")
+
+ @property
+ def idstring(self) -> str:
+ """idstring of folder"""
+ return self._idstring
@property
def uuid(self):
"""UUID of folder"""
+ if self._uuid is not None:
+ return self._uuid
+ self._uuid, self._id = uuid_to_id(
+ run_script("folderUUID", self._idstring), UUID_SUFFIX_FOLDER
+ )
return self._uuid
+ @property
+ def id(self):
+ """ID of folder"""
+ if self._id is not None:
+ return self._id
+ self._uuid, self._id = uuid_to_id(
+ run_script("folderUUID", self._idstring), UUID_SUFFIX_FOLDER
+ )
+ return self._id
+
@property
def name(self):
"""name of folder (read/write)"""
- name = run_script("folderName", self.id)
+ name = run_script("folderName", self._idstring)
return name if name != kMissingValue else ""
@name.setter
def name(self, name):
"""set name of photo"""
name = "" if name is None else name
- return run_script("folderSetName", self.id, name)
+ return run_script("folderSetName", self._idstring, name)
@property
def title(self):
@@ -839,22 +925,20 @@ Source code for photoscript
def title(self, title):
"""set title of folder (alias for name)"""
name = "" if title is None else title
- return run_script("folderSetName", self.id, name)
+ return run_script("folderSetName", self._idstring, name)
@property
def parent_id(self):
- """parent container id"""
- return run_script("folderParent", self.id)
+ """parent container id string"""
+ parent_id = run_script("folderParent", self._idstring)
+ return parent_id if parent_id != kMissingValue else None
# TODO: if no parent should return a "My Albums" object that contains all top-level folders/albums?
@property
def parent(self):
"""Return parent Folder object"""
- parent_id = self.parent_id
- if parent_id != 0:
- return Folder(parent_id)
- else:
- return None
+ parent_idstring = self.parent_id
+ return Folder(idstring=parent_idstring) if parent_idstring is not None else None
[docs] def path_str(self, delim="/"):
"""Return internal library path to folder as string.
@@ -869,7 +953,7 @@ Source code for photoscript
if len(delim) > 1:
raise ValueError("delim must be single character")
- return run_script("folderGetPath", self.id, delim)
+ return run_script("folderGetPath", self._idstring, delim)
[docs] def path(self):
"""Return list of Folder objects this folder is contained in.
@@ -877,29 +961,26 @@ Source code for photoscript
path()[-1] is the immediate parent of this folder. Returns empty
list if folder is not contained in another folders.
"""
- folder_path = run_script("folderPathIDs", self.id)
- return [Folder(folder) for folder in folder_path]
+ folder_path = run_script("folderGetPathFolderIDScript", self._idstring)
+ return [Folder(idstring=folder) for folder in folder_path]
@property
def albums(self):
"""list of Album objects for albums contained in folder"""
- album_ids = run_script("folderAlbums", self.id)
+ album_ids = run_script("folderAlbums", self._idstring)
return [Album(uuid) for uuid in album_ids]
[docs] def album(self, name):
"""Return Album object contained in this folder for album named name
or None if no matching album
"""
- for album in self.albums:
- if album.name == name:
- return album
- return None
+ return next((album for album in self.albums if album.name == name), None)
@property
def subfolders(self):
"""list of Folder objects for immediate sub-folders contained in folder"""
- folder_ids = run_script("folderFolders", self.id)
- return [Folder(uuid) for uuid in folder_ids]
+ folder_idstrings = run_script("folderFolders", self._idstring)
+ return [Folder(idstring=ids) for ids in folder_idstrings]
[docs] def folder(self, name):
"""Folder object for first subfolder folder named name.
@@ -910,12 +991,9 @@ Source code for photoscript
Returns:
Folder object for first subfolder who's name matches name or None if not found
"""
- for folder in self.subfolders:
- if folder.name == name:
- return folder
- return None
+ return next((folder for folder in self.subfolders if folder.name == name), None)
-[docs] def create_album(self, name):
+[docs] def create_album(self, name: str) -> "Album":
"""Creates an album in this folder
Args:
@@ -924,36 +1002,29 @@ Source code for photoscript
Returns:
Album object for newly created album
"""
- return PhotosLibrary().create_album(name, folder=self)
+ return PhotosLibrary().create_album(name=name, folder=self)
-[docs] def create_folder(self, name):
+[docs] def create_folder(self, name: str) -> "Folder":
"""creates a folder in this folder
Returns:
Folder object for newly created folder
"""
- return PhotosLibrary().create_folder(name, folder=self)
+ return PhotosLibrary().create_folder(name=name, folder=self)
[docs] def spotlight(self):
"""spotlight the folder in Photos"""
- run_script("folderSpotlight", self.id)
+ run_script("folderSpotlight", self._idstring)
def __len__(self):
- return run_script("folderCount", self.id)
+ return run_script("folderCount", self._idstring)
[docs]class Photo:
def __init__(self, uuid):
- id_ = uuid
# check to see if we need to add UUID suffix
- if float(PhotosLibrary().version) >= 5.0:
- if len(uuid.split("/")) == 1:
- # osxphotos style UUID without the suffix
- id_ = f"{uuid}{UUID_SUFFIX_PHOTO}"
- else:
- uuid = uuid.split("/")[0]
- valid = run_script("photoExists", uuid)
- if valid:
+ uuid, id_ = uuid_to_id(uuid, UUID_SUFFIX_PHOTO)
+ if valid := run_script("photoExists", uuid):
self.id = id_
self._uuid = uuid
else:
diff --git a/docs/_static/documentation_options.js b/docs/_static/documentation_options.js
index 8c1afeb..44e1488 100644
--- a/docs/_static/documentation_options.js
+++ b/docs/_static/documentation_options.js
@@ -1,6 +1,6 @@
var DOCUMENTATION_OPTIONS = {
URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'),
- VERSION: '0.2.0',
+ VERSION: '0.3.0',
LANGUAGE: 'en',
COLLAPSE_INDEX: false,
BUILDER: 'html',
diff --git a/docs/genindex.html b/docs/genindex.html
index e814501..1122759 100644
--- a/docs/genindex.html
+++ b/docs/genindex.html
@@ -5,7 +5,7 @@
- Index — PhotoScript 0.2.0 documentation
+ Index — PhotoScript 0.3.0 documentation
@@ -186,6 +186,12 @@ H
I
+
- import_photos() (photoscript.Album method)
diff --git a/docs/index.html b/docs/index.html
index 51dceb1..be8e256 100644
--- a/docs/index.html
+++ b/docs/index.html
@@ -6,7 +6,7 @@
-
Welcome to PhotoScript’s documentation! — PhotoScript 0.2.0 documentation
+ Welcome to PhotoScript’s documentation! — PhotoScript 0.3.0 documentation
@@ -126,6 +126,11 @@ Contributors ✨all-contributors specification. Contributions of any kind welcome!
+
+See Also¶
+For a more comprehensive python interface for Mac automation, see PyXA
+which provides a python interface to Photos and many other Mac applications.
+
Documentation¶
diff --git a/docs/modules.html b/docs/modules.html
index b86b91b..e616ecd 100644
--- a/docs/modules.html
+++ b/docs/modules.html
@@ -6,7 +6,7 @@
- photoscript — PhotoScript 0.2.0 documentation
+ photoscript — PhotoScript 0.3.0 documentation
diff --git a/docs/objects.inv b/docs/objects.inv
index 51b644c..a171947 100644
--- a/docs/objects.inv
+++ b/docs/objects.inv
@@ -2,4 +2,6 @@
# Project: PhotoScript
# Version:
# The remainder of this file is compressed using zlib.
-xڥ0{=mK @"@c0F^/OJR` 1E&Ϝ,ޓ'4vJ~DO0(oָP 5q]~Qk`3\,M&Ov0t>Dr\Ke&HqDXړ/Frp@KWY=ٖ5
a#/p!7
Db(lsopcB8]mGif%SvI-(0G+[b?: -3wW.ۓP.N|)y8 iRufwF RWowԍ^ P5ǾIz)߳n8H_v1gWg[ĥ~*m#82>tP!{ލeԻξ (^[ϟQ
- photoscript package — PhotoScript 0.2.0 documentation
+ photoscript package — PhotoScript 0.3.0 documentation
@@ -89,7 +89,7 @@ photoscript module
-
-create_album(name, folder=None)[source]¶
+create_album(name, folder: Folder = None) Album [source]¶
creates an album
- Parameters
@@ -110,7 +110,7 @@ photoscript module
-
-create_folder(name, folder=None)[source]¶
+create_folder(name: str, folder: Folder = None) Folder [source]¶
creates a folder
- Parameters
@@ -131,7 +131,7 @@ photoscript module
-
-delete_album(album)[source]¶
+delete_album(album: Album)[source]¶
deletes album (but does not delete photos in the album)
- Parameters
@@ -142,13 +142,17 @@ photoscript module
-
-delete_folder(folder)[source]¶
-Deletes folder
+delete_folder(folder: Folder)[source]¶
+Deletes folder (and all its sub-folders and albums)
- Parameters
folder – a Folder object for folder to delete
+Notes
+On macOS 10.15 & above, only top-level folders can be deleted.
+Sub-folders cannot be deleted due to a bug in Photos’ AppleScript
+implementation.
@@ -159,13 +163,14 @@ photoscript module
-
-folder(*name, uuid=None, top_level=True)[source]¶
+folder(name: str = None, path: list[str] = None, uuid: str = None, top_level=True)[source]¶
Folder instance by name or uuid
- Parameters
-name – name of folder
-uuid – id of folder
+name – name of folder, e.g. “My Folder”
+path – path of folder as list of strings, e.g. [“My Folder”, “Subfolder”]
+uuid – id of folder, e.g. “F1234567-1234-1234-1234-1234567890AB”
top_level – if True, only searches top level folders by name; default is True
@@ -173,10 +178,11 @@ photoscript moduleFolder object or None if folder could not be found
- Raises
-ValueError if both name and id passed or neither passed. –
+ValueError not one of name, path, or uuid is passed –
-Must pass only name or id but not both.
+
Notes
+Must pass one of path, name, or uuid but not more than one
If more than one folder with same name, returns first one found.
@@ -321,7 +327,7 @@ photoscript module
search – optional text string to search for (returns matching items)
uuid – optional list of UUIDs to get
-range_ – optional list of [start, stop] sequence of photos to get
+range – optional list of [start, stop] sequence of photos to get
- Returns
@@ -329,8 +335,8 @@ photoscript moduleRaises
-ValueError if more than one of search, uuid, range_ passed or invalid range_ –
-TypeError if list not passed for range_ –
+ValueError if more than one of search, uuid, range passed or invalid range –
+TypeError if list not passed for range –
@@ -339,11 +345,11 @@ photoscript module
-
-class photoscript.Folder(uuid)[source]¶
+class photoscript.Folder(uuid: str | None = None, path: list[str] | None = None, idstring: str | None = None)[source]¶
-
album(name)[source]¶
@@ -556,7 +562,7 @@ photoscript module
-
-create_album(name)[source]¶
+create_album(name: str) Album [source]¶
Creates an album in this folder
- Parameters
@@ -570,7 +576,7 @@ photoscript module
-
-create_folder(name)[source]¶
+create_folder(name: str) Folder [source]¶
creates a folder in this folder
- Returns
@@ -593,6 +599,18 @@ photoscript module
+-
+property id¶
+ID of folder
+
+
+
+-
+property idstring: str¶
+idstring of folder
+
+
-
property name¶
@@ -608,7 +626,7 @@ photoscript module
-
property parent_id¶
-parent container id
+parent container id string
diff --git a/docs/search.html b/docs/search.html
index 11a5421..78cf70e 100644
--- a/docs/search.html
+++ b/docs/search.html
@@ -5,7 +5,7 @@
- Search — PhotoScript 0.2.0 documentation
+ Search — PhotoScript 0.3.0 documentation
diff --git a/docs/searchindex.js b/docs/searchindex.js
index 74e6d55..fa3597a 100644
--- a/docs/searchindex.js
+++ b/docs/searchindex.js
@@ -1 +1 @@
-Search.setIndex({"docnames": ["index", "modules", "reference"], "filenames": ["index.rst", "modules.rst", "reference.rst"], "titles": ["Welcome to PhotoScript\u2019s documentation!", "photoscript", "photoscript package"], "terms": {"provid": [0, 2], "python": [0, 2], "wrapper": 0, "around": 0, "appl": 0, "photo": [0, 2], "applescript": [0, 2], "interfac": [0, 2], "With": 0, "you": [0, 2], "can": [0, 2], "interact": 0, "us": [0, 2], "run": [0, 2], "onli": [0, 2], "maco": 0, "catalina": 0, "photosscript": 0, "veri": [0, 2], "dictionari": 0, "design": 0, "5": 0, "preliminari": 0, "big": 0, "sur": 0, "6": 0, "beta": 0, "show": 0, "thi": [0, 2], "should": 0, "work": [0, 2], "well": 0, "ha": 0, "chang": 0, "littl": 0, "sinc": 0, "2": [0, 2], "earliest": 0, "version": [0, 2], "have": 0, "access": 0, "packag": 0, "most": [0, 2], "some": 0, "method": [0, 2], "mai": [0, 2], "function": [0, 2], "correctli": 0, "earlier": 0, "than": [0, 2], "If": [0, 2], "find": 0, "issu": 0, "open": [0, 2], "an": [0, 2], "send": 0, "pr": 0, "setuptool": [], "thu": [0, 2], "simpli": [], "python3": 0, "setup": [], "py": 0, "Or": 0, "via": [0, 2], "pip": 0, "simpl": 0, "import": [0, 2], "photoslib": 0, "photoslibrari": [0, 2], "activ": [0, 2], "print": 0, "f": 0, "album": [0, 2], "album1": 0, "keyword": [0, 2], "travel": 0, "vacat": 0, "titl": [0, 2], "descript": [0, 2], "new_album": 0, "create_album": [0, 2], "new": [0, 2], "import_photo": [0, 2], "user": [0, 2], "rhet": 0, "download": 0, "jpeg": [0, 2], "quit": [0, 2], "full": [0, 2], "here": 0, "addit": 0, "about": [0, 2], "avail": 0, "wiki": 0, "100": 0, "coverag": 0, "For": 0, "cannot": [0, 2], "inform": 0, "face": 0, "nor": 0, "delet": [0, 2], "execut": 0, "through": 0, "object": [0, 2], "c": 0, "bridg": 0, "from": [0, 2], "everi": 0, "call": 0, "do": 0, "round": 0, "trip": 0, "make": [0, 2], "much": 0, "slower": 0, "nativ": 0, "code": 0, "particularli": 0, "notic": 0, "when": [0, 2], "deal": 0, "folder": [0, 2], "which": [0, 2], "requir": 0, "signific": 0, "where": 0, "possibl": 0, "attempt": [0, 2], "doe": [0, 2], "wai": [0, 2], "remov": [0, 2], "order": [0, 2], "creat": [0, 2], "same": [0, 2], "name": [0, 2], "origin": [0, 2], "copi": [0, 2], "all": [0, 2], "simul": 0, "produc": 0, "desir": 0, "effect": 0, "thing": 0, "osxphoto": 0, "read": [0, 2], "librari": [0, 2], "includ": 0, "associ": 0, "metadata": 0, "pyobjc": 0, "thank": 0, "goe": 0, "wonder": 0, "peopl": 0, "emoji": 0, "kei": 0, "david": 0, "haberth\u00fcr": 0, "follow": 0, "specif": 0, "contribut": 0, "ani": [0, 2], "kind": 0, "welcom": [], "modul": 0, "index": 0, "search": [0, 2], "page": 0, "class": 2, "sourc": 2, "app": 2, "uuid": 2, "none": 2, "top_level": 2, "fals": 2, "instanc": 2, "id": 2, "paramet": 2, "true": 2, "top": 2, "level": 2, "default": 2, "return": 2, "could": 2, "found": 2, "rais": 2, "valueerror": 2, "both": 2, "pass": 2, "neither": 2, "must": 2, "more": 2, "one": 2, "first": 2, "album_nam": 2, "list": 2, "otherwis": 2, "also": 2, "sub": 2, "i": 2, "newli": 2, "applescripterror": 2, "error": 2, "create_fold": 2, "delete_album": 2, "delete_fold": 2, "properti": 2, "favorit": 2, "folder_by_path": 2, "folder_path": 2, "path": 2, "descend": 2, "e": 2, "g": 2, "subfolder1": 2, "subfolder2": 2, "folder_nam": 2, "frontmost": 2, "front": 2, "hidden": 2, "visibl": 2, "hide": 2, "tell": 2, "its": 2, "window": 2, "photo_path": 2, "skip_duplicate_check": 2, "file": 2, "str": 2, "pathlib": 2, "option": 2, "check": 2, "duplic": 2, "note": 2, "block": 2, "drop": 2, "down": 2, "sheet": 2, "until": 2, "click": 2, "cancel": 2, "don": [0, 2], "t": [0, 2], "make_album_fold": 2, "either": 2, "compon": 2, "doesn": 2, "exist": 2, "recurs": 2, "need": 2, "alreadi": [0, 2], "empti": 2, "typeerror": 2, "make_fold": 2, "subfold": 2, "similar": 2, "o": 2, "makedir": 2, "final": 2, "library_path": 2, "delai": 2, "10": 2, "wait": 2, "acknowledg": 2, "range_": 2, "gener": 2, "yield": 2, "media": 2, "item": 2, "text": 2, "string": 2, "match": 2, "get": 2, "start": 2, "stop": 2, "sequenc": 2, "invalid": 2, "instead": 2, "becaus": 2, "retriev": 2, "larg": 2, "take": 2, "long": 2, "time": 2, "my": 2, "system": 2, "rate": 2, "1": 2, "per": 2, "second": 2, "limit": 2, "ve": 2, "anywai": 2, "speed": 2, "up": 2, "allow": 2, "process": 2, "individu": 2, "rather": 2, "possibli": 2, "hour": 2, "result": 2, "like": 2, "": 2, "rang": 2, "0": 2, "4": 2, "3": 2, "len": 2, "abl": 2, "optim": 2, "ar": 2, "chunk": 2, "request": 2, "batch": 2, "select": 2, "current": 2, "add": 2, "ad": 2, "export": 2, "export_path": 2, "overwrit": 2, "timeout": 2, "120": 2, "reveal_in_find": 2, "imag": 2, "number": 2, "complet": 2, "each": 2, "befor": 2, "out": 2, "finder": 2, "done": 2, "There": 2, "due": 2, "live": 2, "burst": 2, "valid": 2, "directori": 2, "alwai": 2, "high": 2, "qualiti": 2, "unless": 2, "movi": 2, "primari": 2, "set": 2, "write": 2, "parent": 2, "parent_id": 2, "contain": 2, "path_str": 2, "delim": 2, "intern": 2, "albumnam": 2, "charact": 2, "delimit": 2, "between": 2, "element": 2, "singl": 2, "actual": 2, "except": 2, "those": 2, "old": 2, "remove_by_id": 2, "photo_id": 2, "spotlight": 2, "alia": 2, "who": 2, "immedi": 2, "anoth": 2, "altitud": 2, "gp": 2, "meter": 2, "date": 2, "timezon": 2, "naiv": 2, "datetim": 2, "statu": 2, "boolean": 2, "filenam": 2, "height": 2, "pixel": 2, "locat": 2, "The": 2, "latitud": 2, "longitud": 2, "tupl": 2, "90": 2, "180": 2, "width": 2, "poetri": 0, "manag": 0, "To": 0, "clone": 0, "repo": 0, "instruct": 0, "enter": 0, "virtual": 0, "environ": 0, "shell": 0, "m": 0}, "objects": {"photoscript": [[2, 0, 1, "", "Album"], [2, 0, 1, "", "Folder"], [2, 0, 1, "", "Photo"], [2, 0, 1, "", "PhotosLibrary"]], "photoscript.Album": [[2, 1, 1, "", "add"], [2, 1, 1, "", "export"], [2, 1, 1, "", "import_photos"], [2, 2, 1, "", "name"], [2, 2, 1, "", "parent"], [2, 2, 1, "", "parent_id"], [2, 1, 1, "", "path_str"], [2, 1, 1, "", "photos"], [2, 1, 1, "", "remove"], [2, 1, 1, "", "remove_by_id"], [2, 1, 1, "", "spotlight"], [2, 2, 1, "", "title"], [2, 2, 1, "", "uuid"]], "photoscript.Folder": [[2, 1, 1, "", "album"], [2, 2, 1, "", "albums"], [2, 1, 1, "", "create_album"], [2, 1, 1, "", "create_folder"], [2, 1, 1, "", "folder"], [2, 2, 1, "", "name"], [2, 2, 1, "", "parent"], [2, 2, 1, "", "parent_id"], [2, 1, 1, "", "path"], [2, 1, 1, "", "path_str"], [2, 1, 1, "", "spotlight"], [2, 2, 1, "", "subfolders"], [2, 2, 1, "", "title"], [2, 2, 1, "", "uuid"]], "photoscript.Photo": [[2, 2, 1, "", "albums"], [2, 2, 1, "", "altitude"], [2, 2, 1, "", "date"], [2, 2, 1, "", "description"], [2, 1, 1, "", "duplicate"], [2, 1, 1, "", "export"], [2, 2, 1, "", "favorite"], [2, 2, 1, "", "filename"], [2, 2, 1, "", "height"], [2, 2, 1, "", "keywords"], [2, 2, 1, "", "location"], [2, 2, 1, "", "name"], [2, 1, 1, "", "spotlight"], [2, 2, 1, "", "title"], [2, 2, 1, "", "uuid"], [2, 2, 1, "", "width"]], "photoscript.PhotosLibrary": [[2, 1, 1, "", "activate"], [2, 1, 1, "", "album"], [2, 1, 1, "", "album_names"], [2, 1, 1, "", "albums"], [2, 1, 1, "", "create_album"], [2, 1, 1, "", "create_folder"], [2, 1, 1, "", "delete_album"], [2, 1, 1, "", "delete_folder"], [2, 2, 1, "", "favorites"], [2, 1, 1, "", "folder"], [2, 1, 1, "", "folder_by_path"], [2, 1, 1, "", "folder_names"], [2, 1, 1, "", "folders"], [2, 2, 1, "", "frontmost"], [2, 2, 1, "", "hidden"], [2, 1, 1, "", "hide"], [2, 1, 1, "", "import_photos"], [2, 1, 1, "", "make_album_folders"], [2, 1, 1, "", "make_folders"], [2, 2, 1, "", "name"], [2, 1, 1, "", "open"], [2, 1, 1, "", "photos"], [2, 1, 1, "", "quit"], [2, 2, 1, "", "running"], [2, 2, 1, "", "selection"], [2, 2, 1, "", "version"]]}, "objtypes": {"0": "py:class", "1": "py:method", "2": "py:property"}, "objnames": {"0": ["py", "class", "Python class"], "1": ["py", "method", "Python method"], "2": ["py", "property", "Python property"]}, "titleterms": {"photoscript": [0, 1, 2], "what": 0, "i": 0, "compat": 0, "instal": 0, "exampl": 0, "document": 0, "test": 0, "limit": 0, "relat": 0, "project": 0, "depend": 0, "contributor": 0, "welcom": 0, "": 0, "indic": 0, "tabl": 0, "packag": 2, "modul": 2}, "envversion": {"sphinx.domains.c": 2, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 8, "sphinx.domains.index": 1, "sphinx.domains.javascript": 2, "sphinx.domains.math": 2, "sphinx.domains.python": 3, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx.ext.viewcode": 1, "sphinx.ext.intersphinx": 1, "sphinx": 57}, "alltitles": {"Welcome to PhotoScript\u2019s documentation!": [[0, "welcome-to-photoscript-s-documentation"]], "PhotoScript": [[0, "photoscript"]], "What is PhotoScript": [[0, "what-is-photoscript"]], "Compatibility": [[0, "compatibility"]], "Installation": [[0, "installation"]], "Example": [[0, "example"]], "Documentation": [[0, "documentation"], [0, "id1"]], "Testing": [[0, "testing"]], "Limitations": [[0, "limitations"]], "Related Projects": [[0, "related-projects"]], "Dependencies": [[0, "dependencies"]], "Contributors \u2728": [[0, "contributors"]], "Indices and tables": [[0, "indices-and-tables"]], "photoscript": [[1, "photoscript"]], "photoscript package": [[2, "photoscript-package"]], "photoscript module": [[2, "photoscript-module"]]}, "indexentries": {"album (class in photoscript)": [[2, "photoscript.Album"]], "folder (class in photoscript)": [[2, "photoscript.Folder"]], "photo (class in photoscript)": [[2, "photoscript.Photo"]], "photoslibrary (class in photoscript)": [[2, "photoscript.PhotosLibrary"]], "activate() (photoscript.photoslibrary method)": [[2, "photoscript.PhotosLibrary.activate"]], "add() (photoscript.album method)": [[2, "photoscript.Album.add"]], "album() (photoscript.folder method)": [[2, "photoscript.Folder.album"]], "album() (photoscript.photoslibrary method)": [[2, "photoscript.PhotosLibrary.album"]], "album_names() (photoscript.photoslibrary method)": [[2, "photoscript.PhotosLibrary.album_names"]], "albums (photoscript.folder property)": [[2, "photoscript.Folder.albums"]], "albums (photoscript.photo property)": [[2, "photoscript.Photo.albums"]], "albums() (photoscript.photoslibrary method)": [[2, "photoscript.PhotosLibrary.albums"]], "altitude (photoscript.photo property)": [[2, "photoscript.Photo.altitude"]], "create_album() (photoscript.folder method)": [[2, "photoscript.Folder.create_album"]], "create_album() (photoscript.photoslibrary method)": [[2, "photoscript.PhotosLibrary.create_album"]], "create_folder() (photoscript.folder method)": [[2, "photoscript.Folder.create_folder"]], "create_folder() (photoscript.photoslibrary method)": [[2, "photoscript.PhotosLibrary.create_folder"]], "date (photoscript.photo property)": [[2, "photoscript.Photo.date"]], "delete_album() (photoscript.photoslibrary method)": [[2, "photoscript.PhotosLibrary.delete_album"]], "delete_folder() (photoscript.photoslibrary method)": [[2, "photoscript.PhotosLibrary.delete_folder"]], "description (photoscript.photo property)": [[2, "photoscript.Photo.description"]], "duplicate() (photoscript.photo method)": [[2, "photoscript.Photo.duplicate"]], "export() (photoscript.album method)": [[2, "photoscript.Album.export"]], "export() (photoscript.photo method)": [[2, "photoscript.Photo.export"]], "favorite (photoscript.photo property)": [[2, "photoscript.Photo.favorite"]], "favorites (photoscript.photoslibrary property)": [[2, "photoscript.PhotosLibrary.favorites"]], "filename (photoscript.photo property)": [[2, "photoscript.Photo.filename"]], "folder() (photoscript.folder method)": [[2, "photoscript.Folder.folder"]], "folder() (photoscript.photoslibrary method)": [[2, "photoscript.PhotosLibrary.folder"]], "folder_by_path() (photoscript.photoslibrary method)": [[2, "photoscript.PhotosLibrary.folder_by_path"]], "folder_names() (photoscript.photoslibrary method)": [[2, "photoscript.PhotosLibrary.folder_names"]], "folders() (photoscript.photoslibrary method)": [[2, "photoscript.PhotosLibrary.folders"]], "frontmost (photoscript.photoslibrary property)": [[2, "photoscript.PhotosLibrary.frontmost"]], "height (photoscript.photo property)": [[2, "photoscript.Photo.height"]], "hidden (photoscript.photoslibrary property)": [[2, "photoscript.PhotosLibrary.hidden"]], "hide() (photoscript.photoslibrary method)": [[2, "photoscript.PhotosLibrary.hide"]], "import_photos() (photoscript.album method)": [[2, "photoscript.Album.import_photos"]], "import_photos() (photoscript.photoslibrary method)": [[2, "photoscript.PhotosLibrary.import_photos"]], "keywords (photoscript.photo property)": [[2, "photoscript.Photo.keywords"]], "location (photoscript.photo property)": [[2, "photoscript.Photo.location"]], "make_album_folders() (photoscript.photoslibrary method)": [[2, "photoscript.PhotosLibrary.make_album_folders"]], "make_folders() (photoscript.photoslibrary method)": [[2, "photoscript.PhotosLibrary.make_folders"]], "name (photoscript.album property)": [[2, "photoscript.Album.name"]], "name (photoscript.folder property)": [[2, "photoscript.Folder.name"]], "name (photoscript.photo property)": [[2, "photoscript.Photo.name"]], "name (photoscript.photoslibrary property)": [[2, "photoscript.PhotosLibrary.name"]], "open() (photoscript.photoslibrary method)": [[2, "photoscript.PhotosLibrary.open"]], "parent (photoscript.album property)": [[2, "photoscript.Album.parent"]], "parent (photoscript.folder property)": [[2, "photoscript.Folder.parent"]], "parent_id (photoscript.album property)": [[2, "photoscript.Album.parent_id"]], "parent_id (photoscript.folder property)": [[2, "photoscript.Folder.parent_id"]], "path() (photoscript.folder method)": [[2, "photoscript.Folder.path"]], "path_str() (photoscript.album method)": [[2, "photoscript.Album.path_str"]], "path_str() (photoscript.folder method)": [[2, "photoscript.Folder.path_str"]], "photos() (photoscript.album method)": [[2, "photoscript.Album.photos"]], "photos() (photoscript.photoslibrary method)": [[2, "photoscript.PhotosLibrary.photos"]], "quit() (photoscript.photoslibrary method)": [[2, "photoscript.PhotosLibrary.quit"]], "remove() (photoscript.album method)": [[2, "photoscript.Album.remove"]], "remove_by_id() (photoscript.album method)": [[2, "photoscript.Album.remove_by_id"]], "running (photoscript.photoslibrary property)": [[2, "photoscript.PhotosLibrary.running"]], "selection (photoscript.photoslibrary property)": [[2, "photoscript.PhotosLibrary.selection"]], "spotlight() (photoscript.album method)": [[2, "photoscript.Album.spotlight"]], "spotlight() (photoscript.folder method)": [[2, "photoscript.Folder.spotlight"]], "spotlight() (photoscript.photo method)": [[2, "photoscript.Photo.spotlight"]], "subfolders (photoscript.folder property)": [[2, "photoscript.Folder.subfolders"]], "title (photoscript.album property)": [[2, "photoscript.Album.title"]], "title (photoscript.folder property)": [[2, "photoscript.Folder.title"]], "title (photoscript.photo property)": [[2, "photoscript.Photo.title"]], "uuid (photoscript.album property)": [[2, "photoscript.Album.uuid"]], "uuid (photoscript.folder property)": [[2, "photoscript.Folder.uuid"]], "uuid (photoscript.photo property)": [[2, "photoscript.Photo.uuid"]], "version (photoscript.photoslibrary property)": [[2, "photoscript.PhotosLibrary.version"]], "width (photoscript.photo property)": [[2, "photoscript.Photo.width"]]}})
\ No newline at end of file
+Search.setIndex({"docnames": ["index", "modules", "reference"], "filenames": ["index.rst", "modules.rst", "reference.rst"], "titles": ["Welcome to PhotoScript\u2019s documentation!", "photoscript", "photoscript package"], "terms": {"provid": [0, 2], "python": [0, 2], "wrapper": 0, "around": 0, "appl": 0, "photo": [0, 2], "applescript": [0, 2], "interfac": [0, 2], "With": 0, "you": [0, 2], "can": [0, 2], "interact": 0, "us": [0, 2], "run": [0, 2], "onli": [0, 2], "maco": [0, 2], "catalina": 0, "photosscript": 0, "veri": [0, 2], "dictionari": 0, "design": 0, "5": 0, "preliminari": 0, "big": 0, "sur": 0, "6": 0, "beta": 0, "show": 0, "thi": [0, 2], "should": 0, "work": [0, 2], "well": 0, "ha": 0, "chang": 0, "littl": 0, "sinc": 0, "2": [0, 2], "earliest": 0, "version": [0, 2], "have": 0, "access": 0, "packag": 0, "most": [0, 2], "some": 0, "method": [0, 2], "mai": [0, 2], "function": [0, 2], "correctli": 0, "earlier": 0, "than": [0, 2], "If": [0, 2], "find": 0, "issu": 0, "open": [0, 2], "an": [0, 2], "send": 0, "pr": 0, "setuptool": [], "thu": [0, 2], "simpli": [], "python3": 0, "setup": [], "py": 0, "Or": 0, "via": [0, 2], "pip": 0, "simpl": 0, "import": [0, 2], "photoslib": 0, "photoslibrari": [0, 2], "activ": [0, 2], "print": 0, "f": 0, "album": [0, 2], "album1": 0, "keyword": [0, 2], "travel": 0, "vacat": 0, "titl": [0, 2], "descript": [0, 2], "new_album": 0, "create_album": [0, 2], "new": [0, 2], "import_photo": [0, 2], "user": [0, 2], "rhet": 0, "download": 0, "jpeg": [0, 2], "quit": [0, 2], "full": [0, 2], "here": 0, "addit": 0, "about": [0, 2], "avail": 0, "wiki": 0, "100": 0, "coverag": 0, "For": 0, "cannot": [0, 2], "inform": 0, "face": 0, "nor": 0, "delet": [0, 2], "execut": 0, "through": 0, "object": [0, 2], "c": 0, "bridg": 0, "from": [0, 2], "everi": 0, "call": 0, "do": 0, "round": 0, "trip": 0, "make": [0, 2], "much": 0, "slower": 0, "nativ": 0, "code": 0, "particularli": 0, "notic": 0, "when": [0, 2], "deal": 0, "folder": [0, 2], "which": [0, 2], "requir": 0, "signific": 0, "where": 0, "possibl": 0, "attempt": [0, 2], "doe": [0, 2], "wai": [0, 2], "remov": [0, 2], "order": [0, 2], "creat": [0, 2], "same": [0, 2], "name": [0, 2], "origin": [0, 2], "copi": [0, 2], "all": [0, 2], "simul": 0, "produc": 0, "desir": 0, "effect": 0, "thing": 0, "osxphoto": 0, "read": [0, 2], "librari": [0, 2], "includ": 0, "associ": 0, "metadata": 0, "pyobjc": 0, "thank": 0, "goe": 0, "wonder": 0, "peopl": 0, "emoji": 0, "kei": 0, "david": 0, "haberth\u00fcr": 0, "follow": 0, "specif": 0, "contribut": 0, "ani": [0, 2], "kind": 0, "welcom": [], "modul": 0, "index": 0, "search": [0, 2], "page": 0, "class": 2, "sourc": 2, "app": 2, "uuid": 2, "none": 2, "top_level": 2, "fals": 2, "instanc": 2, "id": 2, "paramet": 2, "true": 2, "top": 2, "level": 2, "default": 2, "return": 2, "could": 2, "found": 2, "rais": 2, "valueerror": 2, "both": 2, "pass": 2, "neither": 2, "must": 2, "more": [0, 2], "one": 2, "first": 2, "album_nam": 2, "list": 2, "otherwis": 2, "also": 2, "sub": 2, "i": 2, "newli": 2, "applescripterror": 2, "error": 2, "create_fold": 2, "delete_album": 2, "delete_fold": 2, "properti": 2, "favorit": 2, "folder_by_path": 2, "folder_path": 2, "path": 2, "descend": 2, "e": 2, "g": 2, "subfolder1": 2, "subfolder2": 2, "folder_nam": 2, "frontmost": 2, "front": 2, "hidden": 2, "visibl": 2, "hide": 2, "tell": 2, "its": 2, "window": 2, "photo_path": 2, "skip_duplicate_check": 2, "file": 2, "str": 2, "pathlib": 2, "option": 2, "check": 2, "duplic": 2, "note": 2, "block": 2, "drop": 2, "down": 2, "sheet": 2, "until": 2, "click": 2, "cancel": 2, "don": [0, 2], "t": [0, 2], "make_album_fold": 2, "either": 2, "compon": 2, "doesn": 2, "exist": 2, "recurs": 2, "need": 2, "alreadi": [0, 2], "empti": 2, "typeerror": 2, "make_fold": 2, "subfold": 2, "similar": 2, "o": 2, "makedir": 2, "final": 2, "library_path": 2, "delai": 2, "10": 2, "wait": 2, "acknowledg": 2, "range_": 2, "gener": 2, "yield": 2, "media": 2, "item": 2, "text": 2, "string": 2, "match": 2, "get": 2, "start": 2, "stop": 2, "sequenc": 2, "invalid": 2, "instead": 2, "becaus": 2, "retriev": 2, "larg": 2, "take": 2, "long": 2, "time": 2, "my": 2, "system": 2, "rate": 2, "1": 2, "per": 2, "second": 2, "limit": 2, "ve": 2, "anywai": 2, "speed": 2, "up": 2, "allow": 2, "process": 2, "individu": 2, "rather": 2, "possibli": 2, "hour": 2, "result": 2, "like": 2, "": 2, "rang": 2, "0": 2, "4": 2, "3": 2, "len": 2, "abl": 2, "optim": 2, "ar": 2, "chunk": 2, "request": 2, "batch": 2, "select": 2, "current": 2, "add": 2, "ad": 2, "export": 2, "export_path": 2, "overwrit": 2, "timeout": 2, "120": 2, "reveal_in_find": 2, "imag": 2, "number": 2, "complet": 2, "each": 2, "befor": 2, "out": 2, "finder": 2, "done": 2, "There": 2, "due": 2, "live": 2, "burst": 2, "valid": 2, "directori": 2, "alwai": 2, "high": 2, "qualiti": 2, "unless": 2, "movi": 2, "primari": 2, "set": 2, "write": 2, "parent": 2, "parent_id": 2, "contain": 2, "path_str": 2, "delim": 2, "intern": 2, "albumnam": 2, "charact": 2, "delimit": 2, "between": 2, "element": 2, "singl": 2, "actual": 2, "except": 2, "those": 2, "old": 2, "remove_by_id": 2, "photo_id": 2, "spotlight": 2, "alia": 2, "who": 2, "immedi": 2, "anoth": 2, "altitud": 2, "gp": 2, "meter": 2, "date": 2, "timezon": 2, "naiv": 2, "datetim": 2, "statu": 2, "boolean": 2, "filenam": 2, "height": 2, "pixel": 2, "locat": 2, "The": 2, "latitud": 2, "longitud": 2, "tupl": 2, "90": 2, "180": 2, "width": 2, "poetri": 0, "manag": 0, "To": 0, "clone": 0, "repo": 0, "instruct": 0, "enter": 0, "virtual": 0, "environ": 0, "shell": 0, "m": 0, "comprehens": 0, "mac": 0, "autom": 0, "pyxa": 0, "mani": 0, "other": 0, "applic": 0, "On": 2, "15": 2, "abov": 2, "bug": 2, "implement": 2, "f1234567": 2, "1234": 2, "1234567890ab": 2, "idstr": 2}, "objects": {"photoscript": [[2, 0, 1, "", "Album"], [2, 0, 1, "", "Folder"], [2, 0, 1, "", "Photo"], [2, 0, 1, "", "PhotosLibrary"]], "photoscript.Album": [[2, 1, 1, "", "add"], [2, 1, 1, "", "export"], [2, 1, 1, "", "import_photos"], [2, 2, 1, "", "name"], [2, 2, 1, "", "parent"], [2, 2, 1, "", "parent_id"], [2, 1, 1, "", "path_str"], [2, 1, 1, "", "photos"], [2, 1, 1, "", "remove"], [2, 1, 1, "", "remove_by_id"], [2, 1, 1, "", "spotlight"], [2, 2, 1, "", "title"], [2, 2, 1, "", "uuid"]], "photoscript.Folder": [[2, 1, 1, "", "album"], [2, 2, 1, "", "albums"], [2, 1, 1, "", "create_album"], [2, 1, 1, "", "create_folder"], [2, 1, 1, "", "folder"], [2, 2, 1, "", "id"], [2, 2, 1, "", "idstring"], [2, 2, 1, "", "name"], [2, 2, 1, "", "parent"], [2, 2, 1, "", "parent_id"], [2, 1, 1, "", "path"], [2, 1, 1, "", "path_str"], [2, 1, 1, "", "spotlight"], [2, 2, 1, "", "subfolders"], [2, 2, 1, "", "title"], [2, 2, 1, "", "uuid"]], "photoscript.Photo": [[2, 2, 1, "", "albums"], [2, 2, 1, "", "altitude"], [2, 2, 1, "", "date"], [2, 2, 1, "", "description"], [2, 1, 1, "", "duplicate"], [2, 1, 1, "", "export"], [2, 2, 1, "", "favorite"], [2, 2, 1, "", "filename"], [2, 2, 1, "", "height"], [2, 2, 1, "", "keywords"], [2, 2, 1, "", "location"], [2, 2, 1, "", "name"], [2, 1, 1, "", "spotlight"], [2, 2, 1, "", "title"], [2, 2, 1, "", "uuid"], [2, 2, 1, "", "width"]], "photoscript.PhotosLibrary": [[2, 1, 1, "", "activate"], [2, 1, 1, "", "album"], [2, 1, 1, "", "album_names"], [2, 1, 1, "", "albums"], [2, 1, 1, "", "create_album"], [2, 1, 1, "", "create_folder"], [2, 1, 1, "", "delete_album"], [2, 1, 1, "", "delete_folder"], [2, 2, 1, "", "favorites"], [2, 1, 1, "", "folder"], [2, 1, 1, "", "folder_by_path"], [2, 1, 1, "", "folder_names"], [2, 1, 1, "", "folders"], [2, 2, 1, "", "frontmost"], [2, 2, 1, "", "hidden"], [2, 1, 1, "", "hide"], [2, 1, 1, "", "import_photos"], [2, 1, 1, "", "make_album_folders"], [2, 1, 1, "", "make_folders"], [2, 2, 1, "", "name"], [2, 1, 1, "", "open"], [2, 1, 1, "", "photos"], [2, 1, 1, "", "quit"], [2, 2, 1, "", "running"], [2, 2, 1, "", "selection"], [2, 2, 1, "", "version"]]}, "objtypes": {"0": "py:class", "1": "py:method", "2": "py:property"}, "objnames": {"0": ["py", "class", "Python class"], "1": ["py", "method", "Python method"], "2": ["py", "property", "Python property"]}, "titleterms": {"photoscript": [0, 1, 2], "what": 0, "i": 0, "compat": 0, "instal": 0, "exampl": 0, "document": 0, "test": 0, "limit": 0, "relat": 0, "project": 0, "depend": 0, "contributor": 0, "welcom": 0, "": 0, "indic": 0, "tabl": 0, "packag": 2, "modul": 2, "see": 0, "also": 0}, "envversion": {"sphinx.domains.c": 2, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 8, "sphinx.domains.index": 1, "sphinx.domains.javascript": 2, "sphinx.domains.math": 2, "sphinx.domains.python": 3, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx.ext.viewcode": 1, "sphinx.ext.intersphinx": 1, "sphinx": 57}, "alltitles": {"Welcome to PhotoScript\u2019s documentation!": [[0, "welcome-to-photoscript-s-documentation"]], "PhotoScript": [[0, "photoscript"]], "What is PhotoScript": [[0, "what-is-photoscript"]], "Compatibility": [[0, "compatibility"]], "Installation": [[0, "installation"]], "Example": [[0, "example"]], "Documentation": [[0, "documentation"], [0, "id1"]], "Testing": [[0, "testing"]], "Limitations": [[0, "limitations"]], "Related Projects": [[0, "related-projects"]], "Dependencies": [[0, "dependencies"]], "Contributors \u2728": [[0, "contributors"]], "See Also": [[0, "see-also"]], "Indices and tables": [[0, "indices-and-tables"]], "photoscript": [[1, "photoscript"]], "photoscript package": [[2, "photoscript-package"]], "photoscript module": [[2, "photoscript-module"]]}, "indexentries": {"album (class in photoscript)": [[2, "photoscript.Album"]], "folder (class in photoscript)": [[2, "photoscript.Folder"]], "photo (class in photoscript)": [[2, "photoscript.Photo"]], "photoslibrary (class in photoscript)": [[2, "photoscript.PhotosLibrary"]], "activate() (photoscript.photoslibrary method)": [[2, "photoscript.PhotosLibrary.activate"]], "add() (photoscript.album method)": [[2, "photoscript.Album.add"]], "album() (photoscript.folder method)": [[2, "photoscript.Folder.album"]], "album() (photoscript.photoslibrary method)": [[2, "photoscript.PhotosLibrary.album"]], "album_names() (photoscript.photoslibrary method)": [[2, "photoscript.PhotosLibrary.album_names"]], "albums (photoscript.folder property)": [[2, "photoscript.Folder.albums"]], "albums (photoscript.photo property)": [[2, "photoscript.Photo.albums"]], "albums() (photoscript.photoslibrary method)": [[2, "photoscript.PhotosLibrary.albums"]], "altitude (photoscript.photo property)": [[2, "photoscript.Photo.altitude"]], "create_album() (photoscript.folder method)": [[2, "photoscript.Folder.create_album"]], "create_album() (photoscript.photoslibrary method)": [[2, "photoscript.PhotosLibrary.create_album"]], "create_folder() (photoscript.folder method)": [[2, "photoscript.Folder.create_folder"]], "create_folder() (photoscript.photoslibrary method)": [[2, "photoscript.PhotosLibrary.create_folder"]], "date (photoscript.photo property)": [[2, "photoscript.Photo.date"]], "delete_album() (photoscript.photoslibrary method)": [[2, "photoscript.PhotosLibrary.delete_album"]], "delete_folder() (photoscript.photoslibrary method)": [[2, "photoscript.PhotosLibrary.delete_folder"]], "description (photoscript.photo property)": [[2, "photoscript.Photo.description"]], "duplicate() (photoscript.photo method)": [[2, "photoscript.Photo.duplicate"]], "export() (photoscript.album method)": [[2, "photoscript.Album.export"]], "export() (photoscript.photo method)": [[2, "photoscript.Photo.export"]], "favorite (photoscript.photo property)": [[2, "photoscript.Photo.favorite"]], "favorites (photoscript.photoslibrary property)": [[2, "photoscript.PhotosLibrary.favorites"]], "filename (photoscript.photo property)": [[2, "photoscript.Photo.filename"]], "folder() (photoscript.folder method)": [[2, "photoscript.Folder.folder"]], "folder() (photoscript.photoslibrary method)": [[2, "photoscript.PhotosLibrary.folder"]], "folder_by_path() (photoscript.photoslibrary method)": [[2, "photoscript.PhotosLibrary.folder_by_path"]], "folder_names() (photoscript.photoslibrary method)": [[2, "photoscript.PhotosLibrary.folder_names"]], "folders() (photoscript.photoslibrary method)": [[2, "photoscript.PhotosLibrary.folders"]], "frontmost (photoscript.photoslibrary property)": [[2, "photoscript.PhotosLibrary.frontmost"]], "height (photoscript.photo property)": [[2, "photoscript.Photo.height"]], "hidden (photoscript.photoslibrary property)": [[2, "photoscript.PhotosLibrary.hidden"]], "hide() (photoscript.photoslibrary method)": [[2, "photoscript.PhotosLibrary.hide"]], "id (photoscript.folder property)": [[2, "photoscript.Folder.id"]], "idstring (photoscript.folder property)": [[2, "photoscript.Folder.idstring"]], "import_photos() (photoscript.album method)": [[2, "photoscript.Album.import_photos"]], "import_photos() (photoscript.photoslibrary method)": [[2, "photoscript.PhotosLibrary.import_photos"]], "keywords (photoscript.photo property)": [[2, "photoscript.Photo.keywords"]], "location (photoscript.photo property)": [[2, "photoscript.Photo.location"]], "make_album_folders() (photoscript.photoslibrary method)": [[2, "photoscript.PhotosLibrary.make_album_folders"]], "make_folders() (photoscript.photoslibrary method)": [[2, "photoscript.PhotosLibrary.make_folders"]], "name (photoscript.album property)": [[2, "photoscript.Album.name"]], "name (photoscript.folder property)": [[2, "photoscript.Folder.name"]], "name (photoscript.photo property)": [[2, "photoscript.Photo.name"]], "name (photoscript.photoslibrary property)": [[2, "photoscript.PhotosLibrary.name"]], "open() (photoscript.photoslibrary method)": [[2, "photoscript.PhotosLibrary.open"]], "parent (photoscript.album property)": [[2, "photoscript.Album.parent"]], "parent (photoscript.folder property)": [[2, "photoscript.Folder.parent"]], "parent_id (photoscript.album property)": [[2, "photoscript.Album.parent_id"]], "parent_id (photoscript.folder property)": [[2, "photoscript.Folder.parent_id"]], "path() (photoscript.folder method)": [[2, "photoscript.Folder.path"]], "path_str() (photoscript.album method)": [[2, "photoscript.Album.path_str"]], "path_str() (photoscript.folder method)": [[2, "photoscript.Folder.path_str"]], "photos() (photoscript.album method)": [[2, "photoscript.Album.photos"]], "photos() (photoscript.photoslibrary method)": [[2, "photoscript.PhotosLibrary.photos"]], "quit() (photoscript.photoslibrary method)": [[2, "photoscript.PhotosLibrary.quit"]], "remove() (photoscript.album method)": [[2, "photoscript.Album.remove"]], "remove_by_id() (photoscript.album method)": [[2, "photoscript.Album.remove_by_id"]], "running (photoscript.photoslibrary property)": [[2, "photoscript.PhotosLibrary.running"]], "selection (photoscript.photoslibrary property)": [[2, "photoscript.PhotosLibrary.selection"]], "spotlight() (photoscript.album method)": [[2, "photoscript.Album.spotlight"]], "spotlight() (photoscript.folder method)": [[2, "photoscript.Folder.spotlight"]], "spotlight() (photoscript.photo method)": [[2, "photoscript.Photo.spotlight"]], "subfolders (photoscript.folder property)": [[2, "photoscript.Folder.subfolders"]], "title (photoscript.album property)": [[2, "photoscript.Album.title"]], "title (photoscript.folder property)": [[2, "photoscript.Folder.title"]], "title (photoscript.photo property)": [[2, "photoscript.Photo.title"]], "uuid (photoscript.album property)": [[2, "photoscript.Album.uuid"]], "uuid (photoscript.folder property)": [[2, "photoscript.Folder.uuid"]], "uuid (photoscript.photo property)": [[2, "photoscript.Photo.uuid"]], "version (photoscript.photoslibrary property)": [[2, "photoscript.PhotosLibrary.version"]], "width (photoscript.photo property)": [[2, "photoscript.Photo.width"]]}})
\ No newline at end of file