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 @@ - Overview: module code — PhotoScript 0.2.0 documentation + Overview: module code — PhotoScript 0.3.0 documentation diff --git a/docs/_modules/photoscript.html b/docs/_modules/photoscript.html index 3b1eb32..d419747 100644 --- a/docs/_modules/photoscript.html +++ b/docs/_modules/photoscript.html @@ -5,7 +5,7 @@ - photoscript — PhotoScript 0.2.0 documentation + photoscript — PhotoScript 0.3.0 documentation @@ -35,6 +35,8 @@

Source code for photoscript

 """ 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 @"@c0𮺼F^/OJR` 1 E&Ϝ,ޓ'4vJ~D׾O0(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_v1gW g[ĥ~*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 module

    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. +

    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